2012-06-07 145 views
0

我有一个显示用户统计信息的页面,我想知道从一个表中获取每周,每月,每年和所有时间统计信息的最佳方式是在一个查询中?在一个查询中获取每周,每月,每年的数据

目前我使用单独的查询检查每个日期范围内的结果,但必须有更好的方法。出于示例目的,我想在过去的一个月,一周和一年中统计'votes'='1'的所有行。

+0

请显示您的表格结构,至少近似一个。 – dasblinkenlight

回答

5
SELECT 
    user_id, 
    SUM(IF(ts>CURRENT_DATE - INTERVAL 1 WEEK,votes,0)) votes_weekly, 
    SUM(IF(ts>CURRENT_DATE - INTERVAL 1 MONTH,votes,0)) votes_monthly, 
    SUM(IF(ts>CURRENT_DATE - INTERVAL 1 YEAR,votes,0)) votes_yearly 
FROM table 
WHERE ts>CURRENT_DATE - INTERVAL 1 YEAR 
GROUP BY user_id; 
+0

'CURRENT_DATE - INTERVAL 1 '等同于减去不移动日期到星期/月份/等的开始日期;所以数据在所有日期可能不准确,除非处理一周中的第一天,月份等。根据数据的敏感程度,这个答案可能是灾难性的。 – srcspider