MYSQL统计某一天的24小时的数据条数的SQL怎么写啊

Trace__ 2014-06-17 11:01:33
MYSQL统计某一天的24小时的数据条数的SQL怎么写啊

...全文
8377 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
鬼逛 2016-05-17
  • 打赏
  • 举报
回复
上面代码有错误,将'%Y-%M-%D %H:%I:%S'全部改为'%Y-%m-%d %H:%i:%s'就好了
鬼逛 2016-05-17
  • 打赏
  • 举报
回复
我是这么写的,代码有点啰嗦 ------------------------------------------------------ 表结构: id int PAYMENT_TIME int ---------------------------------------------------------- 存储的值是日期时间戳: id PAYMENT_TIME 1,1463389883 2,1426951074 3,1426951108 ------------------------------------------------------------- 函数: CURDATE() -- 取得今天年月日,不带时分秒(结果如:1999-05-09) CURDATE() - INTERVAL 1 DAY -- 今天日期减去一天(结果如:1999-05-08) IFNULL(E,V) -- 如果E==NULL,则返回V,否则返回E FROM_UNIXTIME(1463389883,'%Y-%M-%D %H:%I:%S') -- 将时间戳转换成年月日时分秒形式(结果如:1999-05-08 13:30:33) HOUR('1999-05-08 13:30:33') -- 只取小时(结果:13) UNIX_TIMESTAMP('1999-05-05') -- 将日期转为时间戳(结果如:1463389000) --------------------------------------------------------------------------------------------------------------------------------------------------------------- SQL: SELECT CURDATE() - INTERVAL 1 DAY AS '昨天', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 0 THEN 1 ELSE 0 END),0) AS '0', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 1 THEN 1 ELSE 0 END),0) AS '1', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 2 THEN 1 ELSE 0 END),0) AS '2', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 3 THEN 1 ELSE 0 END),0) AS '3', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 4 THEN 1 ELSE 0 END),0) AS '4', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 5 THEN 1 ELSE 0 END),0) AS '5', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 6 THEN 1 ELSE 0 END),0) AS '6', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 7 THEN 1 ELSE 0 END),0) AS '7', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 8 THEN 1 ELSE 0 END),0) AS '8', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 9 THEN 1 ELSE 0 END),0) AS '9', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 10 THEN 1 ELSE 0 END),0) AS '10', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 11 THEN 1 ELSE 0 END),0) AS '11', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 12 THEN 1 ELSE 0 END),0) AS '12', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 13 THEN 1 ELSE 0 END),0) AS '13', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 14 THEN 1 ELSE 0 END),0) AS '14', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 15 THEN 1 ELSE 0 END),0) AS '15', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 16 THEN 1 ELSE 0 END),0) AS '16', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 17 THEN 1 ELSE 0 END),0) AS '17', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 18 THEN 1 ELSE 0 END),0) AS '18', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 19 THEN 1 ELSE 0 END),0) AS '19', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 20 THEN 1 ELSE 0 END),0) AS '20', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 21 THEN 1 ELSE 0 END),0) AS '21', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 22 THEN 1 ELSE 0 END),0) AS '22', IFNULL(SUM(CASE HOUR(FROM_UNIXTIME(PAYMENT_TIME,'%Y-%M-%D %H:%I:%S')) WHEN 23 THEN 1 ELSE 0 END),0) AS '23' FROM TABLE WHERE PAYMENT_TIME >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 1 DAY) AND PAYMENT_TIME < UNIX_TIMESTAMP(CURDATE()) ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 运行结果为昨天每小时内的记录: DATE 0 1 2 3 ... 23 1999-05-08 5 9 0 15 ... 3
famous100 2015-06-07
  • 打赏
  • 举报
回复
请问楼主这个问题解决了么 解决了的话如何解决我 求教啊
丁丁Arene 2015-04-27
  • 打赏
  • 举报
回复
楼上的datetime()函数从哪里来的?
netajax1 2014-06-19
  • 打赏
  • 举报
回复

select createdate,
COUNT(case when datename(hh,createdate)=1 then 1 else 0 end) as '1',
COUNT(case when datename(hh,createdate)=2 then 1 else 0 end) as '2',
COUNT(case when datename(hh,createdate)=3 then 1 else 0 end) as '3',
COUNT(case when datename(hh,createdate)=4 then 1 else 0 end) as '4',
COUNT(case when datename(hh,createdate)=5 then 1 else 0 end) as '5',
COUNT(case when datename(hh,createdate)=6 then 1 else 0 end) as '6',
COUNT(case when datename(hh,createdate)=7 then 1 else 0 end) as '7',
COUNT(case when datename(hh,createdate)=8 then 1 else 0 end) as '8',
COUNT(case when datename(hh,createdate)=9 then 1 else 0 end) as '9',
COUNT(case when datename(hh,createdate)=10 then 1 else 0 end) as '10',
COUNT(case when datename(hh,createdate)=11 then 1 else 0 end) as '11',
COUNT(case when datename(hh,createdate)=12 then 1 else 0 end) as '12',
COUNT(case when datename(hh,createdate)=13 then 1 else 0 end) as '13',
COUNT(case when datename(hh,createdate)=14 then 1 else 0 end) as '14',
COUNT(case when datename(hh,createdate)=15 then 1 else 0 end) as '15',
COUNT(case when datename(hh,createdate)=16 then 1 else 0 end) as '16',
COUNT(case when datename(hh,createdate)=17 then 1 else 0 end) as '17',
COUNT(case when datename(hh,createdate)=18 then 1 else 0 end) as '18',
COUNT(case when datename(hh,createdate)=19 then 1 else 0 end) as '19',
COUNT(case when datename(hh,createdate)=20 then 1 else 0 end) as '20',
COUNT(case when datename(hh,createdate)=21 then 1 else 0 end) as '21',
COUNT(case when datename(hh,createdate)=22 then 1 else 0 end) as '22',
COUNT(case when datename(hh,createdate)=23 then 1 else 0 end) as '23',
COUNT(case when datename(hh,createdate)=24 then 1 else 0 end) as '24'
from tb
group by createdate
wshzhww 2014-06-19
  • 打赏
  • 举报
回复
m.DT_ACTIONDATE改為CreateTime 不小心把自己代碼COPY進去了
wshzhww 2014-06-19
  • 打赏
  • 举报
回复
正好做過類似需求,MYSQL的不會,不過應該可以給你思路,以下是ORACLE的按日期>小時分組并按時間順序排序的語句:

select to_char(CreateTime,'yyyy-MM-dd') as DATE,--日期分組
to_char(CreateTime,'HH24') as HOUR,--小時分組
count(*) as TOTAL  --統計條數
from carinfo Where (to_char(m.DT_ACTIONDATE,'yyyy-mm-dd') = ‘2014-06-19’
group by to_char(CreateTime,'yyyy-MM-dd'),to_char(CreateTime,'HH24')
order by to_char(CreateTime,'yyyy-MM-dd'),to_char(CreateTime,'HH24') asc 
但是這樣是不能查到零數據的,你可以在程序中插入零值
淡淡的活着 2014-06-17
  • 打赏
  • 举报
回复
小时的话·我记得SQL是可以截取字符串的··那能不能用截取的小时直接比较·
残月照我心 2014-06-17
  • 打赏
  • 举报
回复
引用 11 楼 mp0258463 的回复:
[quote=引用 10 楼 xiaomou_mou 的回复:] [quote=引用 9 楼 mp0258463 的回复:] [quote=引用 7 楼 qq931121347 的回复:] sql不是有个区间的函数么 用那个··
between and 这个只能统计一个时间范围的啊。我要的是统计每个小时的啊![/quote] 你是要分组? 1点 2点 还是啥 ?你表达不清晰[/quote] 就是要分组的啊,1点,2点,3点。。。。。24点 依次类推,统计每小时的数据
select hour(CreateTime) as hours,count(*) as counts from carinfo where DATE_FORMAT(CreateTime,'%Y-%m-%d') = '2004-06-12'  group by hour(CreateTime); 
我这样写不行啊![/quote] 好像我看懂了,是不是你给某一天的时间值 例如 2014-6-17号?然后统计每个小时的数据对吧
-烟花雨季 2014-06-17
  • 打赏
  • 举报
回复
select DATEPART ( hh , [CreateTime] )as hours,count(*) as counts from [carinfo] group by DATEPART ( hh , [CreateTime] )
Trace__ 2014-06-17
  • 打赏
  • 举报
回复
引用 10 楼 xiaomou_mou 的回复:
[quote=引用 9 楼 mp0258463 的回复:] [quote=引用 7 楼 qq931121347 的回复:] sql不是有个区间的函数么 用那个··
between and 这个只能统计一个时间范围的啊。我要的是统计每个小时的啊![/quote] 你是要分组? 1点 2点 还是啥 ?你表达不清晰[/quote] 就是要分组的啊,1点,2点,3点。。。。。24点 依次类推,统计每小时的数据
select hour(CreateTime) as hours,count(*) as counts from carinfo where DATE_FORMAT(CreateTime,'%Y-%m-%d') = '2004-06-12'  group by hour(CreateTime); 
我这样写不行啊!
残月照我心 2014-06-17
  • 打赏
  • 举报
回复
引用 9 楼 mp0258463 的回复:
[quote=引用 7 楼 qq931121347 的回复:] sql不是有个区间的函数么 用那个··
between and 这个只能统计一个时间范围的啊。我要的是统计每个小时的啊![/quote] 你是要分组? 1点 2点 还是啥 ?你表达不清晰
Trace__ 2014-06-17
  • 打赏
  • 举报
回复
引用 7 楼 qq931121347 的回复:
sql不是有个区间的函数么 用那个··
between and 这个只能统计一个时间范围的啊。我要的是统计每个小时的啊!
淡淡的活着 2014-06-17
  • 打赏
  • 举报
回复
between 这个函数··应该可以用的
淡淡的活着 2014-06-17
  • 打赏
  • 举报
回复
sql不是有个区间的函数么 用那个··
Trace__ 2014-06-17
  • 打赏
  • 举报
回复
引用 3 楼 u010349035 的回复:
表里面加个时间字段,然后根据日期去查不就行了?

时间字段有的
但是这样查的话,只可以查询出一条啊!

Trace__ 2014-06-17
  • 打赏
  • 举报
回复
引用 2 楼 mp0258463 的回复:
当选择某一天的时候 可以查询出这天24小时的数据条数! 求大神指点!




表里面有时间的字段的,这不是根据时间 参考啊。得选中选中的某一天进行 统计21小时的数据!
apple8160 2014-06-17
  • 打赏
  • 举报
回复
加个时间字段 between 0点 and 23:59:59 就行啦
-烟花雨季 2014-06-17
  • 打赏
  • 举报
回复
表里面加个时间字段,然后根据日期去查不就行了?
Trace__ 2014-06-17
  • 打赏
  • 举报
回复
当选择某一天的时候 可以查询出这天24小时的数据条数! 求大神指点!
加载更多回复(2)

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧