【发布时间】:2020-03-16 15:11:32
【问题描述】:
我正在处理一个 SQL 查询,我必须找出任何日期的每个组的平均值、最大值、最大值-日期时间、最小值、最小值-日期时间。为此,我使用了以下查询
SELECT
Dl.TagDescID,
convert( decimal(18,2), AVG( Dl.Value ) ) AS 'TotalAvgValue',
convert(decimal(18,2), MAX( Dl.Value ) ) AS 'MaxValue',
MAX( Dl.Date ) MaxDate,
convert( decimal(18,2), MIN( Dl.Value ) ) AS 'MinValue',
Min( Dl.Date ) MinDate
FROM
tblDataLog AS Dl WITH (nolock)
INNER JOIN tblTagDescription AS TD WITH (nolock) ON Dl.TagDescID = TD.ID
WHERE
( CONVERT(date, Dl.Date, 103) = CONVERT(date, @StartDate, 103) )
AND
( TD.GroupName = @Group )
GROUP BY
Dl.TagDescID
`
TagDescID TotalAvgValue MaxValue MaxDate MinValue MinDate
1 36.59 36.59 2020-01-07 10:13:42.293 36.59 2020-01-07 10:13:32.750
2 20.49 20.49 2020-01-07 10:13:42.293 20.49 2020-01-07 10:13:32.750
In the above Data Set The MaxValue of TagDescID 1 is 36.59 and its Date as 'MaxDate' should be the exact datetime when this maxvalue Arrives in the table tblDataLog. here Max-Date of MaxValue of TagDescID 1 is '2020-01-07 10:13:42.293' but the value should have been '2020-01-07 08:13:42.293'. Same for MinValue and MinDate For each TagDescID.
How to solve it?
【问题讨论】:
-
您应该包含一个汇总数据集和结果集,以显示您的预期和实际观察到的结果
-
所以你想通过
Date过滤,但也返回Max(Date)和Min(Date)我认为我们在这里遗漏了一些东西,如果我们过滤日期,那么 Max 和 Min 将是相同的值...或者您是否在寻找指定日期的最大和最小时间? -
我想要任意日期的每个 TagDescID 的平均值、MaxValue、MaxValue DateTime、MinValue、MinValue DateTime
-
请提供一些示例数据和预期结果 - 这是清楚地传达您正在寻找的内容的唯一方法。此外,除非绝对必要,否则您当然应该避免使用
with (nolock) -
您不应该使用
CONVERT( date, Dl.Date, 103 ),因为它不是 SARGable 谓词。为什么@StartDate不是date值?CREATE TABLE语句中Dl.Date的实际数据类型是什么?
标签: sql-server datetime