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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.12.2017, 14:27   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Можно ли просуммировать поля с одинаковыми датами

Доброе время суток
Имеется набор в DataSet (см. внизу)

Код:
select DATE_CONTROL, СКО1, СКО3, ID from table1 where ORGANIZATION_ID = %d and COUNT_ID in (select ID from COUNTER1 where CHART_ENABLE = 1) order by DATE_CONTROL
Можно ли каким-то образом его доработать, чтоб числа с СКО1 и СКО3 суммировались при одинаковых датах и при этом на этих строках (уже с одной датой) выставлять признак о их суммировании (он нужен при дальнейшей работе с набором данных)

Например хотел
Код:
select DATE_CONTROL, SUM(COALESCE(CKO1,0) + COALESCE(CKO3,0)) as VALUE1 from table1 where ORGANIZATION_ID = %d and COUNT_ID in (select ID from COUNTER1 where CHART_ENABLE = 1) GROUP BY DATE_CONTROL ORDER BY DATE_CONTROL
но нету суммирования

Спасибо
Изображения
Тип файла: png Untitled.png (18.7 Кб, 56 просмотров)

Последний раз редактировалось KBO; 14.12.2017 в 14:36.
KBO вне форума Ответить с цитированием
Старый 14.12.2017, 14:36   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Код:
SUM(COALESCE(CKO1,0) + COALESCE(CKO3,0)) as VALUE1,COUNT(*) AS VALUE2
VALUE2>1 и будет признаком того, что было несколько записей
Если это сиквел, то лучше COALESCE заменить на ISNULL, или IFNULL для мускула
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 14.12.2017, 14:53   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
SUM(COALESCE(CKO1,0) + COALESCE(CKO3,0)) as VALUE1,COUNT(*) AS VALUE2
VALUE2>1 и будет признаком того, что было несколько записей
Если это сиквел, то лучше COALESCE заменить на ISNULL, или IFNULL для мускула
Все равно что-то не так, НЕТ суммирования у одинаковых (допустим у даты 01.12.2017 <> 0,021, т.к. 0,016 не складывается с 0,005) дат и в VALUE2 постоянно "1"
Изображения
Тип файла: png Untitled1.png (16.7 Кб, 53 просмотров)

Последний раз редактировалось KBO; 14.12.2017 в 15:05.
KBO вне форума Ответить с цитированием
Старый 14.12.2017, 15:17   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Так бы и сказал, что время проигнорировать. Пример для сиквела, можно к типу DATE приводить вместо FLOAT, если 2008 и выше
Код:
SELECT MAX(Date_Control),SUM(...),COUNT(*) 
  ...
  GROUP BY CAST(FLOOR(CAST(Date_Control AS FLOAT)) AS DATETIME)
или чуть проще
Код:
  GROUP BY FLOOR(CAST(Date_Control AS FLOAT))
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.12.2017 в 15:24.
Аватар вне форума Ответить с цитированием
Старый 14.12.2017, 16:31   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
  GROUP BY FLOOR(CAST(Date_Control AS FLOAT))
не подошло, выкинуло переполнение
Overflow occurred during data type conversion/ conversion error from “7-NOV-2017 18:38:00.0000”

- только тип не "DATETIME", вы хотели написать "TIMESTAMP"

Последний раз редактировалось KBO; 14.12.2017 в 16:47.
KBO вне форума Ответить с цитированием
Старый 14.12.2017, 16:50   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,042
По умолчанию

Если у тебя не сиквел, то и не подойдет )) Для других СУБД и другие функции даты-времени. Или там поле строкового типа? И не переполнение, а ошибка преобразования типов
Цитата:
только тип не "DATETIME", вы хотели написать "TIMESTAMP"
что хотел, то и написал
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 14.12.2017 в 16:57.
Аватар вне форума Ответить с цитированием
Старый 14.12.2017, 16:53   #7
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
... Или там поле строкового типа?
Нет, там как раз DATATIME,
ага "FLOAT" не подходит, "double" - так же не подходит.
Тут нужно наверное "CONVERT" использовать.

Последний раз редактировалось KBO; 14.12.2017 в 17:04.
KBO вне форума Ответить с цитированием
Старый 14.12.2017, 17:50   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от KBO Посмотреть сообщение
Тут нужно наверное "CONVERT" использовать.
Вы бы начали с того, что сказали, какая у Вас СУБД.
(судя по тексту ошибки это Firebird | InterBase, это так?)
Serge_Bliznykov вне форума Ответить с цитированием
Старый 14.12.2017, 17:58   #9
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Вы бы начали с того, что сказали, какая у Вас СУБД.
(судя по тексту ошибки это Firebird | InterBase, это так?)
Извиняюсь...

Firebird 2.5
KBO вне форума Ответить с цитированием
Старый 14.12.2017, 18:49   #10
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

подсскажите пожалуйста,

решил проверить как работает
Код:
select CONVERT(double,GETDATE(),113) from table1
неизвестная функция "CONVERT" начал ее искать в udf - ни как не могу найти.

Последний раз редактировалось KBO; 14.12.2017 в 19:07.
KBO вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Можно ли сделать поля в колонках ListView кликабельными? FleXik Общие вопросы Delphi 6 04.05.2015 06:36
Как можно в cheklistbox вставить имена поля на с русскими буквами если в бд имя поля с латинскими букв Shingis БД в Delphi 9 20.04.2015 22:12
Обновить поля с датами Swatch SQL, базы данных 3 13.11.2012 16:33
Как можно просуммировать ячейки одного цвета? Асясяся Помощь студентам 5 12.10.2011 09:21
Можно ли программно установить свойство поля DisplayFormat ? М_Виктор БД в Delphi 4 12.01.2010 13:36