我必须查询按小时或天分组的样本表,并使用AVG,Max得到结果,其中最大值的日期与最小值相同。这张桌子很大,所以我需要最好的表现。
表:
CREATE TABLE Samples (
[Id] INT IDENTITY (1, 1) NOT NULL,
[AvgValue] FLOAT NULL,
[SampleDate] DATETIME NOT NULL,
[MaxValue] FLOAT NULL,
[DT_MaxValue] DATETIME NULL,
[MinValue] FLOAT NULL,
[DT_MinValue] DATETIME NULL
);
表中的行:
Id AvgValue SampleDate MaxValue DT_MaxValue MinValue DT_MinValue
1 10 2018-01-01T01:00:00 15 2018-01-01T01:02:00 9 2018-01-01T01:08:00
2 15 2018-01-01T01:15:00 18 2018-01-01T01:22:00 10 2018-01-01T01:16:00
3 17 2018-01-01T02:15:00 19 2018-01-01T02:27:00 12 2018-01-01T02:17:00
4 20 2018-01-01T02:30:00 23 2018-01-01T02:42:00 14 2018-01-01T02:34:00
5 22 2018-01-01T02:45:00 24 2018-01-01T02:52:00 18 2018-01-01T02:46:00
6 25 2018-01-01T03:00:00 27 2018-01-01T03:14:00 22 2018-01-01T03:01:00
预期结果:
AvgValue SampleDate MaxValue DT_MaxValue MinValue DT_MinValue
12,5 2018-01-01T01:00:00 18 2018-01-01T01:22:00 9 2018-01-01T01:08:00
19,66 2018-01-01T02:00:00 24 2018-01-01T02:52:00 12 2018-01-01T02:17:00
25 2018-01-01T03:00:00 27 2018-01-01T03:14:00 22 2018-01-01T03:01:00
困难的部分是将日期与最大值和最小值相关联。我无法更改表格,但可以创建视图。
更新
数据来自远程系统,该系统每隔几个SECONDS对数据进行采样,并以15分钟的间隔计算Avg,读取的最大值(采样时的日期时间)和间隔的最小值(也包括日期时间) 。 " SampleDate"是间隔开始的日期时间。
我想要的是以更长的间隔(小时,天,月)查询表格和分组,但保留最大值及其时间,以及最小时间。
"按小时分组"我的意思是想要获得每个日期每小时的值,这是" 2018-01-01T01:00:00"与" 2018-01-01T01:00:00"
不同我希望这有助于澄清问题
答案 0 :(得分:0)
您的代码看起来像SQL Server。要在白天获得摘要:
SELECT CAST(SampleDate as date),
AVG( AvgValue ) AS AvgValue,
MAX( Maxvalue ) AS MaxValue,
MAX( DT_MaxValue ) AS DT_MaxValue
FROM t
GROUP BY CAST(SampleDate as date);
按小时获取样本的最简单方法是包括小时:
SELECT CAST(SampleDate as date), DATEPART(HOUR, SampleDate),
AVG( AvgValue ) AS AvgValue,
MAX( Maxvalue ) AS MaxValue,
MAX( DT_MaxValue ) AS DT_MaxValue
FROM t
GROUP BY CAST(SampleDate as date), DATEPART(HOUR, SampleDate);