Sql server 根据om最大值pr.houer将原始数据表中的数据分组到另一个
我真的希望有人能帮我解决这个棘手的问题 我有一个不断接收数据的表(如数据日志) 表24*7接收数据。 每小时可以有许多记录和许多名称A、B、C、D等 生菜Sql server 根据om最大值pr.houer将原始数据表中的数据分组到另一个,sql-server,datetime,group-by,aggregate-functions,Sql Server,Datetime,Group By,Aggregate Functions,我真的希望有人能帮我解决这个棘手的问题 我有一个不断接收数据的表(如数据日志) 表24*7接收数据。 每小时可以有许多记录和许多名称A、B、C、D等 生菜 LogTime Name Value 2015-05-16 00:29:00 A 03 2015-05-16 00:48:00 A 15 2015-05-16 00:29:00 B 30 2015-05-16 00:35:00
LogTime Name Value
2015-05-16 00:29:00 A 03
2015-05-16 00:48:00 A 15
2015-05-16 00:29:00 B 30
2015-05-16 00:35:00 B 32
2015-05-16 00:59:00 B 66
2015-05-16 01:25:11 A 88
2015-05-16 01:52:00 A 100
2015-05-16 01:26:45 B 5
2015-05-16 01:57:00 B 51
每天午夜后,我都想运行一个返回到前一天的过程
XXXX-XX-XX 00:00:00至XXXX-XX-XX 23:59:59。
取每个名称的最大值,按小时分组,并将结果插入到另一个表中,格式如下
表格结果
TimeByHouer Name Value
2015-05-08 01:00:00 A 15
2015-05-08 01:00:00 B 66
2015-05-08 02:00:00 A 100
2015-05-08 02:00:00 B 51
请尝试以下查询:
declare @t table(logtime datetime, name char(1), value int)
insert into @t(logtime, name, value) values
('2015-05-16 00:29:00', 'A', 3),
('2015-05-16 00:48:00', 'A', 15),
('2015-05-16 00:29:00', 'B', 30),
('2015-05-16 00:35:00', 'B', 32),
('2015-05-16 00:59:00', 'B', 66),
('2015-05-16 01:25:11', 'A', 88),
('2015-05-16 01:52:00', 'A', 100),
('2015-05-16 01:26:45', 'B', 5),
('2015-05-16 01:57:00', 'B', 51)
; with Hs(TimeByHouer, name, value) as (
Select H = DATETIMEFROMPARTS(DATEPART(YEAR, logtime), DATEPART(MONTH, logtime), DATEPART(DAY, logtime), DATEPART(HOUR, logtime), 0, 0, 0)
, name, value From @t
)
Select TimeByHouer, name, Max(value) From Hs Group By TimeByHouer, name
Order By TimeByHouer, name
对于2012,您还可以使用:
Select DATEADD(HOUR, DATEPART(HOUR, logtime), cast(cast(logtime as date) as datetime))
我很难理解你在请求什么帮助。请澄清您希望完成的内容,并演示您已经尝试过的内容,包括任何相关代码。我刚刚编辑了您的问题以提高可读性。抱歉,我无法在论坛中找到表格格式,我添加了uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu,它真的很好用。非常感谢你的帮助。我先测试了一下:)你能接受我的答案吗。谢谢