gold_dezmor
@gold_dezmor
Digital director / Product manager

Как конвертировать DateTime в Date для группировки по дате в запросе SQL — DELPHI?

Добрый день уважаемые знатоки!

Наткнулся на проблему с группировкой результатов SQL-запроса по дате.
Структура таблицы:
id - номер заказа;
price - общая стоимость;
date_insert - дата заказа; - тип DateTime

Формирую запрос на расчет среднего чека и количество заказов:
SELECT id, date_insert, SUM(price), AVG(price), COUNT(id)
FROM b_sale_order
WHERE (canceled = 'N') AND (date_insert BETWEEN :StartD AND :EndD)
ORDER BY date_insert
GROUP BY date_insert


Собственно группировка не выполняется, так как запрос выпадет с ошибкой в группировке по полю Даты.
Вычитал что проблема в том, что у меня тип данных для этого поля DateTime, а не простой Date.
И требуется конвертировать или отбросить часть записи со временем.

Как это сделать чтобы получился корректный SQL_запрос с группировкой по полю Даты?
Данные нужно будет загонять в TeeChart, поэтому без группировки никак..
  • Вопрос задан
  • 1207 просмотров
Решения вопроса 1
gold_dezmor
@gold_dezmor Автор вопроса
Digital director / Product manager
Собственно работает всё.

Вот итоговый запрос:

SELECT date_format(date_insert, "%Y.%m.%d") as Date, Sum(price), AVG(price) as SrCheck
FROM b_sale_order 
WHERE (canceled = 'N') AND (date_insert BETWEEN '2017.01.01' AND '2017.01.31') 
GROUP BY Date 
ORDER BY Date
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Ошибка в том, что ORDER BY и GROUP BY должны идти в обратном порядке.
Для группировки по дате надо так:
SELECT DATE(`date_insert`) AS `date`, SUM(`price`), AVG(`price`), COUNT(*)
  FROM `b_sale_order`
  WHERE (`canceled` = 'N') AND (`date_insert` BETWEEN :StartD AND :EndD)
  GROUP BY `date`
  ORDER BY `date`

`id` выбирать бесполезно, он будет взят от первой попавшейся строки в группе. Индекс в GROUP BY и ORDER BY работать не будет, поскольку используется не значение поля, а функция от него.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы