2011-05-11 88 views
30

在我的posts表中,它爲每個帖子記錄節省時間戳。按時間戳分組

什麼查詢可以使用此時間戳列按天分組帖子?

回答

48

這個怎麼樣?使用DATE功能:

SELECT DATE(FROM_UNIXTIME(MyTimestamp)) AS ForDate, 
     COUNT(*) AS NumPosts 
FROM MyPostsTable 
GROUP BY DATE(FROM_UNIXTIME(MyTimestamp)) 
ORDER BY ForDate 

這將顯示在該表中有數據,每個日期的職位數目。

+0

我找到了我的答案,但你的答案不正確,它返回null,正確的是:'DATE(FROM_UNIXTIME(timestamp))' – 2011-05-11 21:46:32

+0

您編輯的答案是正確的,謝謝 – 2011-05-11 21:50:14

+1

@ p.campbell:如何限制每個日期的行?例如:對於'2011-05-11'我有10個職位和'2011-05-12' 20職位,我想每個日期顯示'2職位',你能幫我嗎? – 2011-05-11 22:12:28

0
SELECT 
    * 
FROM 
(
    SELECT DATE(FROM_UNIXTIME(MyTimestamp)) AS ForDate, 
      ROW_NUMBER() OVER (PARTITION BY DATE(FROM_UNIXTIME(MyTimestamp)) ORDER BY MyTimeStamp) AS PostRowID, 
      * 
    FROM MyPostsTable 
) 
    AS sequenced_daily_posts 
WHERE 
    ForDate = <whatever date(s) you want> 
    AND PostRowID <= 2 
+0

謝謝,但看到我最後的評論:'我想只顯示在每個日期的最後一個帖子2'我認爲這個查詢只顯示其日期的帖子,有2個帖子 – 2011-05-11 22:24:51

+0

我測試過你查詢和它返回語法錯誤'( PARTITION BY DATE(FROM_UNIXTIME(MyTimestamp)))' – 2011-05-11 22:27:22

+0

如果一天有1個帖子,它將顯示當天的一個帖子。如果一天有2個帖子,它將顯示當天的兩個帖子。如果每天有3個或更多帖子,則只會顯示當天的前2個帖子。 (將DESC添加到ORDER BY中,使其顯示每天的最後兩個帖子。)每天這個限制爲2天不會影響您是否有一百天,總計最多返回200條記錄。 – MatBailie 2011-05-11 22:28:27

24
SELECT DATE(timestamp) AS ForDate, 
     COUNT(*) AS NumPosts 
FROM user_messages 
GROUP BY DATE(timestamp) 
ORDER BY ForDate 

這才發現我。我有時間戳「2013-03-27 15:46:08」。

+0

這在MySQL 5.1.52中工作,在以前的答案中的DATE(FROM_UNIXTIME(MyTimestamp))返回null。 – 2015-08-03 03:49:30