Форум программистов
 
Расширенный поиск
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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



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

Доброе время суток
Имеется набор в 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 Кб, 17 просмотров)

Последний раз редактировалось KBO; 14.12.2017 в 15:36.
KBO вне форума   Ответить с цитированием
Старый 14.12.2017, 15:36   #2
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 16,954
Репутация: 5965
По умолчанию

Код:

SUM(COALESCE(CKO1,0) + COALESCE(CKO3,0)) as VALUE1,COUNT(*) AS VALUE2

VALUE2>1 и будет признаком того, что было несколько записей
Если это сиквел, то лучше COALESCE заменить на ISNULL, или IFNULL для мускула
__________________
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар на форуме   Ответить с цитированием
Старый 14.12.2017, 15:53   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 269
Репутация: 16
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:

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 Кб, 15 просмотров)

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

Так бы и сказал, что время проигнорировать. Пример для сиквела, можно к типу 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 в 16:24.
Аватар на форуме   Ответить с цитированием
Старый 14.12.2017, 17:31   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 269
Репутация: 16
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:

  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 в 17:47.
KBO вне форума   Ответить с цитированием
Старый 14.12.2017, 17:50   #6
Аватар
Модератор
Заслуженный модератор
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Адрес: Северодонецк.ua
Сообщений: 16,954
Репутация: 5965
По умолчанию

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

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

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

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

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

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

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

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

решил проверить как работает
Код:

select CONVERT(double,GETDATE(),113) from table1

неизвестная функция "CONVERT" начал ее искать в udf - ни как не могу найти.

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



Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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




13:37.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

купить трафик


как улучшить посещаемость, а также решения по монетизации сайтов, видео и приложений

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru