按日期频率排序

时间:2012-10-17 15:39:47

标签: mysql

我有一个包含以下列的MySQL数据库:

id(INT) 持续时间(FLOAT) start_date(DATETIME)

我想获得持续时间和start_date列的模态统计信息(频率计数)。

按频率对事件的持续时间进行排序非常简单:

SELECT duration, COUNT(duration) 
AS frequency 
FROM trips 
GROUP BY duration 
ORDER BY frequency 
DESC;

如果我在start_date列上运行相同的查询,我会得到表单的结果:

(datetime.datetime(2012, 8, 20, 15, 22), 6L)

(我正在使用python访问数据库)。但是,接收按分钟分类的查询并不一定有用 - 月,星期几和小时是更有用的查询。我已经尝试将查询更改为:

SELECT MONTH(start_date), COUNT(MONTH(start_date)) 
AS frequency 
FROM trips 
GROUP BY start_date 
ORDER BY frequency 
DESC;

但是,如果我这样做,那么我开始收到有关我的SQL语法的错误(错误1064)。不幸的是,我无法弄清楚错误是什么。

我已经考虑过将年,月,星期,小时,分钟等放在不同的列中,但我觉得应该可以在查询中选择日期时间字段的子字段。

谢谢!

1 个答案:

答案 0 :(得分:1)

计算start_date个月的频率:

SELECT YEAR(start_date), MONTH(start_date), COUNT(*) AS frequency
FROM trips
GROUP BY YEAR(start_date), MONTH(start_date)
ORDER BY frequency DESC;

计算持续时间的频率:

SELECT duration, COUNT(*) AS frequency
FROM trips
GROUP BY duration
ORDER BY frequency DESC;