我在我的表中有这些样本记录,我想每3分钟对它们进行分组。基于每个组的min(Matched_BeginTime)。
Keywords Matched_BeginTime Station_ID Program_ID TVCapCID ScheduleID
"Police" 2015-11-17 17:00:37.160 120 715 486290066 102691
"Police" 2015-11-17 17:01:48.620 120 715 486290088 102691
"Police" 2015-11-17 17:02:02.140 120 715 486290091 102691
"Police" 2015-11-17 17:02:53.100 120 715 486290102 102691
"Police" 2015-11-17 17:03:03.540 120 715 486290106 102691
"Police" 2015-11-17 17:03:48.020 120 715 486290119 102691
"SAS" 2015-11-17 17:03:57.940 120 715 486290122 102691
"SAS" 2015-11-17 17:08:25.800 120 715 486290197 102691
"Police" 2015-11-17 17:08:32.960 120 715 486290199 102691
"Emergency" 2015-11-17 17:09:02.540 120 715 486290206 102691
"SAS" 2015-11-17 17:10:55.640 120 715 486290246 102691
"Police" 2015-11-17 17:12:23.240 120 715 486290273 102691
这是我理想的结果:
Keywords_Groups Min_Matched_BeginTime
Police 11/17/2015 17:00:37
Police,SES 11/17/2015 17:03:48
SES,Police,Emergency 11/17/2015 17:08:26
Police 11/17/2015 17:12:23
每条记录按match_Date分组,每3分钟一次
forexp,前5个记录应该在一个组中,因为它们在min(matchDate)+ 3minutes
注意:我尝试使用之前给出的解决方案。喜欢这些:
How to group time by hour or by 10 minutesSQL SERVER - Group records by n minutes interval
这是我从上述解决方案中尝试的示例代码:
select datepart(minute, Matched_BeginTime)/3,min(Matched_BeginTime),Keywords
from [table]
group by datepart(minute, Matched_BeginTime)/3,Keywords
order by MIN(Matched_BeginTime)
,这就是结果:
0 2015-11-17 17:00:37.160 "Police"
1 2015-11-17 17:03:03.540 "Police"
1 2015-11-17 17:03:57.940 "SAS"
2 2015-11-17 17:08:25.800 "SAS"
2 2015-11-17 17:08:32.960 "Police"
3 2015-11-17 17:09:02.540 "Emergency"
3 2015-11-17 17:10:55.640 "SAS"
4 2015-11-17 17:12:23.240 "Police"
如你所见,它按分钟除以3分组,从00开始但不是基于Min(Matched_BeginTime)
感谢您的帮助
注意:通过使用存储过程,我可以做得很好,我更喜欢有一个 单个TSQL命令。
答案 0 :(得分:0)
您可以使用子查询获取最小时间戳并使用datediff 找到分钟并按上述除以3。 msdn.microsoft.com/en-us/library/ms189794.aspx
获取最小时间戳的子查询
Select min(Matched_BeginTime) as minMBT FROM [table]
将其添加到您的查询中并使用datediff:
select datediff(minute, sub.minMBT, Matched_BeginTime)/3,Keywords
from [table], (Select min(Matched_BeginTime) as minMBT FROM [table]) as Sub
group by datediff(minute, sub.minMBT, Matched_BeginTime)/3,Keywords
order by datediff(minute, sub.minMBT, Matched_BeginTime)/3
注意强>: 将此子查询添加到from行,不在哪里是相同的 作为“交叉连接”或没有on子句的常规连接 - 因为sub 只有一行和一列,它只是将每个行的单个值添加到其中。
如果您希望使用逗号“加入”多行,则可以使用我在此处显示的技术:https://stackoverflow.com/a/1785923/215752
但是,如果你有一个用于显示的前端,我希望创建逗号分隔列表更容易。