Группировка по дням, но один результат установлен для часов менее 16:00 и один для часов выше 16:00

Я снова застрял!
Я получил следующий запрос, чтобы выбрать набор результатов клиентов и некоторые даты.

SELECT
COUNT( DISTINCT CASE `saved` WHEN 0 THEN `cust` ELSE NULL END ) AS test,
COUNT( DISTINCT CASE `saved` WHEN 1 THEN `cust` ELSE NULL END ) AS test2,
DATE( `date` ) AS dateday
FROM `salg_test`
WHERE `is_void` = 0
GROUP BY dateday
ORDER BY dateday DESC

Это можно рассматривать как итог. Теперь я хотел бы отделить этот запрос на основе следующего условия: час меньше 16:00 или больше 16:00. Я использую PHPmyadmin, поле даты имеет формат current_timestamp, 24-часовой формат. Проблема в том, что мне все еще нужно, чтобы он был сгруппирован по DATE, а не current_timestamp. Если возможно, я бы хотел расширить свой SQL-запрос, а не использовать PHP, хотя я отображаю запрос в таблице с циклом while. Какие-нибудь советы?

Большое спасибо за Вашу помощь!

0

Решение

Вы пытались добавить другой элемент к вашему запросу в соответствии с приведенным ниже утверждением?

IF(DATE_FORMAT(dateday, '%H') < 16,0,1) AS afterfourpm

Оператор должен получить час в 24-часовом формате в столбце датирования и вывести результат 0, если его меньше 16, и 1, если он выше 16.

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

SELECT COUNT( DISTINCT
CASE `saved`
WHEN 0
THEN `cust`
ELSE NULL
END ) AS test, COUNT( DISTINCT
CASE `saved`
WHEN 1
THEN `cust`
ELSE NULL
END ) AS winback, DATE( `date` ) AS test1,
IF(DATE_FORMAT(dateday, '%H') < 16,0,1) AS afterfourpm
FROM `salg_test`
WHERE `is_void` =0
GROUP BY dateday
ORDER BY dateday DESC, afterfourpm DESC

Я надеюсь, что в этом есть смысл.

0

Другие решения

Вы должны написать другой оператор case в SQL, на котором вы группируете.

Например:

Case when timestamp <= 16:00 then 'Y' else 'N' end as time_flag

Сгруппируйте это также, и вы получите желаемый результат.

0

По вопросам рекламы [email protected]