我又被卡住了! 我得到以下查询来选择客户的结果集和一些日期。
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 :(得分: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
也可以分组,它可以为您提供所需的输出。