Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 12:57   #1
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию Узнать даты по дням и вывести сумму по определенному столбцу

Есть у меня например 100 записей, из которых 30 записей на 01.02.03
30 записей 02.02.03 и 40 записей 03.02.03, и есть еще два столбца kilogramm1, kilogramm2, мне надо сгрупировав даты и вывести одну после последней самой записи например с датой 01.02.03 - строку с суммой killogramm1-killogramm2
например есть
date|killogramm1|killogramm2
01.02.03|1.1|1.2
01.02.03|1.2|1.3
01.02.03|1.3|1.1
01.02.03|1.5|1.0
01.02.03|1.6|1.9
02.02.03|1.1|1.2
02.02.03|1.2|1.3
02.02.03|1.3|1.1
02.02.03|1.5|1.0
02.02.03|1.6|1.9
03.02.03|1.1|1.0
03.02.03|1.2|1.0
03.02.03|1.3|1.1
03.02.03|1.5|1.0
03.02.03|1.6|1.9

и мне надо, чтобы записи добавлялись после последней записи с определенной датой, как узнать какая запись из всех дат последняя
date|SUM((killogramm2)-(killogramm1))
01.02.03|6.5
02.02.03|6.5
03.02.03|6.0
Код:
SELECT 
      [date]
      ,SUM((killogramm2)-(killogramm1))//Неверная сумма выводит 6,499999999 или 5,99999999
  FROM [telec].[dbo].[PRODUCT] GROUP BY [date]
1 старый программист, лучше новых 2-х

Последний раз редактировалось Droid; 01.12.2010 в 13:05.
Droid вне форума Ответить с цитированием
Старый 01.12.2010, 13:20   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) какая СУБД ?
2) Вы уверены, что Вам именно в выборке нужно получить результаты в отдельной строке , после каждой даты ?!
чем вариант Дата . Сумма_Разностей не устраивает?

или я неверно понял и проблема в том, что сумма получается не точно такая?! Так добавьте округление до стольки знаков после запятой, сколько могут иметь входные параметры. в вашем случае округление до десятых Вас спасёт...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 01.12.2010, 14:29   #3
Droid
Форумчанин
 
Аватар для Droid
 
Регистрация: 24.04.2008
Сообщений: 440
По умолчанию

Ну например если 1 значения поля равно -3 а второе 3.4 разница между ними и сумму он мне выдает 3.999999999 а не 3.4. Не вкурсе насчет как он округляет, но мне нужно точное число 3.4 и чтоб в последующе получал только точную разницу. И нужно узнать, что именно из 30 строк с датой 01.02.03 именно 29 последняя с такой датой. Мне нужно после всех дат с 01.02.03 получить сумму разности 2-х столбцов.
СУБД MSSQL
1 старый программист, лучше новых 2-х

Последний раз редактировалось Droid; 01.12.2010 в 17:06.
Droid вне форума Ответить с цитированием
Старый 01.12.2010, 19:34   #4
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

чота постановка задачи неалё
всё на телепатах держится

тебе в имеющиеся данные нужно добавить инфу о разнице двух полей для каждой даты?
а в какое поле ты собрался выводить эту разницу?
и что это за числа такие? - они чота никак не согласуются с приведенными данными

Цитата:
date|SUM((killogramm2)-(killogramm1))
01.02.03|6.5
02.02.03|6.5
03.02.03|6.0
soleil@mmc вне форума Ответить с цитированием
Старый 02.12.2010, 09:25   #5
BeJIuKuu_Hexo4yxa
Пользователь
 
Регистрация: 13.10.2010
Сообщений: 96
По умолчанию

То, что выдается 3.3999999999, а не 3.4, лечится только принудительным округлением. Помнится еще в Access'e был баг такой.

А чтобы определить, какая из строк будет последней в наборе данных, нужно их отсортировать по какому-либо признаку, т.к. при разных сортировках разные строки будут последними. Дата в данном случае не подходит, т.к. она у всей подгруппы равна. Нужно либо дата+время, либо дата + что-то еще
Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете. (Стив Макконнелл)
BeJIuKuu_Hexo4yxa вне форума Ответить с цитированием
Старый 02.12.2010, 14:03   #6
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

вы там вручную их обрабатывать собрались?
подытоги можно добавить обычным юнионом
а чтобы эти данные вывести в нормальном виде нужно ввести в оба датасета фиктивное поле, которое даст возможность верно отсортировать набор данных

типа такого
для всего набора данных вводим - 0 as f0
для добавляемого с подытогами - 1 as f0

и тогда сортировка будет выглядеть так
order by date, f0, ...

З.Ы.: ну и минус вам в карму за обзывание полей в базе ключевыми словами
soleil@mmc вне форума Ответить с цитированием
Старый 02.12.2010, 16:16   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
а чтобы эти данные вывести в нормальном виде нужно ввести в оба датасета фиктивное поле
не, ну так не честно. я придумал этот способ вчера днём. Ждал ответа от автора топика, чтобы козырнуть своим ответом, а Вы взяли и выхватили у меня это решение! так нельзя...

Цитата:
З.Ы.: ну и минус вам в карму за обзывание полей в базе ключевыми словами
и опять таки, +1
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти сумму элементов и вывести согласные буквы Ilya87 Помощь студентам 3 28.03.2010 04:08
Вывести сумму чисел из строки Айдар Помощь студентам 17 20.06.2009 23:39
:'( вывести даты которые прошли... Julia_Lisha SQL, базы данных 1 17.05.2009 13:44
Вывести даты рождения лежащие в интервале XuTpbIu SQL, базы данных 5 25.03.2009 16:47
В двумерном массиве 4*5 найти сумму элементов по строке или столбцу. bkmz Помощь студентам 11 16.04.2008 11:17