我有以下查询:
SELECT COUNT(*) AS COUNT, DATE(POST_DATE) AS POST_DATE
FROM POST
WHERE POST_DATE>='?'
GROUP BY DATE(POST_DATE)
POST_DATE
实际上是DATETIME
。
现在,此查询工作正常,但我想进行一次小调整。我希望早上6点之前的所有帖子都算作昨天的帖子。
所以我需要说:if POST_DATE.hour < 6 -> date(POST_DATE) - 1
但是我不确定在这个查询中如何做到这一点......或者如果可能的话。
我的第一个想法是用日期转换做另一个查询,然后用count和groupby包装该结果
来自SQL向导的任何想法?
答案 0 :(得分:1)
SELECT COUNT(*) AS COUNT, case when hour(POST_DATE) >= 6
then DATE(POST_DATE)
else POST_DATE - interval 1 day
end AS NEW_POST_DATE
FROM POST
WHERE POST_DATE >= '?'
GROUP BY NEW_POST_DATE
答案 1 :(得分:1)
您希望将第n + 1天早上6点之前的所有帖子制成表格,就像它们是从第n天开始一样。这意味着您希望将它们制成表格,就好像它们比实际时间戳早6小时制作。
这是你做的。
SELECT COUNT(*) AS COUNT,
DATE(POST_DATE - INTERVAL 6 HOUR) AS POST_DATE
FROM POST
WHERE DATE(POST_DATE - INTERVAL 6 HOUR) = ?
GROUP BY DATE(POST_DATE - INTERVAL 6 HOUR)
在所有情况下,您只需将POST_DATE偏移六个小时。我假设当您选择特定日期的帖子时,您希望它从06:00到06:00,而不是午夜到午夜。
请注意,由于列值上的函数,WHERE子句会在POST_DATE上失败使用索引。你可能想要这个。
WHERE POST_DATE >= ? + INTERVAL 6 HOUR
AND POST_DATE < ? + INTERVAL 1 DAY + INTERVAL 6 HOUR