按天分组但是一个结果设置为小于16:00的小时和一个小于16:00的小时

时间:2016-06-24 21:18:09

标签: php sql date phpmyadmin hour

我又被卡住了! 我得到以下查询来选择客户的结果集和一些日期。

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循环的表中。有小费吗?

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:0)

您是否尝试在下面的语句中添加其他项目到您的选择查询?

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

该语句应在dateay列中以24小时格式获取小时,如果小于16则生成结果0,如果大于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

我希望这是有道理的。

答案 1 :(得分:0)

您应该将另一个case语句写入您分组的SQL中。

例如:

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

也可以分组,它可以为您提供所需的输出。