如何使用MySql中的单个查询按小时进行细分?
假设我的桌子是这样的:如何使用MySql中的单个查询按小时进行细分?,mysql,Mysql,假设我的桌子是这样的: Sessions start_dts (datetime) end_dts (datetime) start_dts end_dts 12/25/2011 01:55:00 12/25/2011 03:30:00 Date Hour MinutesOnline 12/25/2011 0 0 12/25/2011 1 5 12/25/2011 2 60 12/25/
Sessions
start_dts (datetime)
end_dts (datetime)
start_dts end_dts
12/25/2011 01:55:00 12/25/2011 03:30:00
Date Hour MinutesOnline
12/25/2011 0 0
12/25/2011 1 5
12/25/2011 2 60
12/25/2011 3 30
... (every hour of the date range being queried)
数据如下所示:
Sessions
start_dts (datetime)
end_dts (datetime)
start_dts end_dts
12/25/2011 01:55:00 12/25/2011 03:30:00
Date Hour MinutesOnline
12/25/2011 0 0
12/25/2011 1 5
12/25/2011 2 60
12/25/2011 3 30
... (every hour of the date range being queried)
我需要查询结果如下所示:
Sessions
start_dts (datetime)
end_dts (datetime)
start_dts end_dts
12/25/2011 01:55:00 12/25/2011 03:30:00
Date Hour MinutesOnline
12/25/2011 0 0
12/25/2011 1 5
12/25/2011 2 60
12/25/2011 3 30
... (every hour of the date range being queried)
一个查询就可以做到这一点吗?与其说是答案,不如说是一个大评论 MySQL做得不够好,但是 CTE在开始和结束数据之间提供一组日期时间 所以你得到了
startTime endTime
12/25/2011 01:00:00 12/25/2011 02:00:00
12/25/2011 02:00:00 12/25/2011 03:00:00
12/25/2011 03:00:00 12/25/2011 04:00:00
在CT.EndTime也许…这是一个很好的开始。这适用于任何日期/时间范围。但是,它有一个主要的先决条件:您需要创建一个
interval
表,其中包含一个dt_hr datetime
字段,该字段包含您正在扫描的所有间隔
Ex: '2011-12-25 00:00:00',
'2011-12-25 01:00:00',
'2011-12-25 02:00:00',
'2011-12-25 03:00:00',
. . .
'2011-12-25 23:00:00'
-
选择日期格式(interval.dt_hr,“%m/%d/%Y”)作为日期,
提取(时间间隔中的小时数)作为小时,
案例
当interval.dt_hr>TIMESTAMPADD(小时、小时(s2.开始时间)、日期(s2.开始时间))
和interval.dt_hrTIMESTAMPADD(小时、小时(s2.start_dts)、日期(s2.start_dts))
然后提取(s2.end\U dts的分钟数)
当interval.dt_hr=TIMESTAMPADD(小时、小时(s2.开始_dts)、日期(s2.开始_dts))
和interval.dt_hr=TIMESTAMPADD(小时、小时(s2.end_dts)、日期(s2.end_dts))
然后提取(s2.end\U dts的分钟数)-提取(s2.start\U dts的分钟数)
其他0
以分钟结束在线
每隔一段时间
左加入会话s2
在interval.dt_hr>=TIMESTAMPADD(小时、小时(s2.start_dts)、日期(s2.start_dts))
和interval.dt_hr check out@Matthew:这里的主要问题是使用2个日期作为输入生成N行。生成数据后,无需进一步分组即可使用's@zerkms你说得对,我误解了这个问题。问得好。如果我有mysql可用,我会非常感兴趣地尝试解决它。这看起来很棒。我明天再跟进。