2014-05-08 132 views
0

我有以下查詢:MySQL的日期轉型集團通過

SELECT COUNT(*) AS COUNT, DATE(POST_DATE) AS POST_DATE 
FROM POST 
WHERE POST_DATE>='?' 
GROUP BY DATE(POST_DATE) 

POST_DATE實際上是一個DATETIME

現在,這個查詢工作正常,除了我想做一個小的調整。我希望在上午6點之前的所有帖子都算作昨天的帖子。

所以不知何故,我需要說:如果POST_DATE.hour < 6 -> date(POST_DATE) - 1

但我不知道如何在這此查詢...或者如果這甚至有可能。

我首先想到的是做另一個查詢的日期轉換,然後換行的結果與統計和GROUPBY

任何想法從SQL嚮導?

回答

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 
+0

非常感謝! – Shaun

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