2011-05-11 73 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