给定一个包含2列的表
Name(type VARCHAR) Time(type DATETIME)我需要编写一个SQL查询来查找条目数量最多的小时。
例如:
Name Time
---- ----
a 12:30pm
b 12:05pm
c 13:55pm
d 12:50pm
e 01:02am所需结果为:12 1pm 1 1pm
我的总体想法是:
1)按小时分组行
2)统计行数/组数
3)按降序排列计数
4)打印最大计数
我需要帮助将此转换为SQL查询。
发布于 2013-02-28 19:58:42
这很简单..。
SELECT HOUR(Time) as Hr,COUNT(*) AS Cnt
FROM MyTable
GROUP BY Hour(Time)
ORDER BY Cnt DESC
LIMIT 1GROUP BY Hour(Time) -按小时分组
ORDER BY Cnt DESC -这将使其按计数排序(按降序)
LIMIT 1 -因为您只需要一个排名靠前的结果
发布于 2013-02-28 23:30:02
据我所知,这是您正在寻找的Oracle版本:
SELECT t_stamp
, MAX(count(t_stamp)) OVER (PARTITION BY t_stamp ORDER BY t_stamp) hits_per_hr_interval
FROM
(
SELECT name, EXTRACT(hour From Cast(t_stamp as timestamp)) t_stamp
FROM stack_test
)
GROUP BY t_stamp
/
T_STAMP HITS_PER_HR_INTERVAL
-------------------------------
12 3
13 2或者使用row_number():
SELECT * FROM
(
SELECT t_stamp
, Count(t_stamp) OVER (PARTITION BY t_stamp ORDER BY t_stamp) hits_per_hr_interval
, ROW_NUMBER() OVER (PARTITION BY t_stamp ORDER BY t_stamp) hr_seq
FROM
(
SELECT EXTRACT(hour From Cast(t_stamp as timestamp)) t_stamp
FROM stack_test
)
)
-- WHERE hr_seq = 1 -- optional to see only first row per group as in above example
/
T_STAMP HITS_PER_HR_INTERVAL HR_SEQ
------------------------------------------
12 3 1
12 3 2
12 3 3
13 2 1
13 2 2你可以添加更多的过滤器,比如你的工作时间只在12点到1点之间...
https://stackoverflow.com/questions/15134909
复制相似问题