在 SQL Server 2016 中为每个 GROUP BY 列获取 MAX() 减去 MIN()?
Get MAX() minus MIN() for each GROUP BY column in SQL Server 2016?
不知道如何表达,但本质上,我想编写一个查询,输出每个 "LocationDescription" 的 MAX(StatusDateTime) 减去 MIN(StatusDateTime) 的结果,以及如果这甚至可以通过一个查询实现,那么天上掉馅饼的输出还将包括给定 LocationDescription 的总行数。
示例数据:
LocationDescription StatusDateTime
Site 1 2/6/20 10:35:34.027
Site 1 2/6/20 10:35:33.823
Site 1 2/6/20 10:35:33.183
Site 1 2/6/20 10:35:32.387
Site 2 2/6/20 10:35:53.500
Site 2 2/6/20 10:33:06.917
Site 2 2/6/20 10:33:06.300
Site 2 2/6/20 10:34:44.083
Site 2 2/6/20 10:34:52.410
Site 2 2/6/20 10:34:40.503
Site 2 2/6/20 10:34:49.710
Site 2 2/6/20 10:35:53.753
Site 3 2/6/20 10:32:38.253
Site 3 2/6/20 10:36:08.987
Site 3 2/6/20 10:36:08.013
Site 3 2/6/20 10:36:06.060
Site 3 2/6/20 10:32:45.890
理想输出(持续时间根据上面的样本数据在下面大致确定):
LocationDescription DurationDifference TotalRecords
Site 1 00:00:02.000 4
Site 2 00:02:47.000 8
Site 3 00:03:21.000 5
1 个查询是否可行?
编辑:我的最终目标是尝试说 "X number of records per second for Site 1"、"X number of records per second for Site 2" 等。这是一个基于性能的指标,我计划在仪表板上使用它来显示事情有多快正在接受健康检查。
尝试按位置描述进行聚合,然后使用 DATEDIFF
以秒为单位找出最小和最大状态时间之间的差异。
SELECT
LocationDescription,
DATEDIFF(second, MAX(StatusDateTime), MIN(StatusDateTime)) AS DurationDifference,
COUNT(*) AS TotalRecords
FROM yourTable
GROUP BY
LocationDescription;
这符合您的要求。
SELECT
LocationDescription,
DATEDIFF(seconds,MAX(StatusDateTime), MIN(StatusDateTime)) AS DurationDifference,
COUNT(*) AS TotalRecords
FROM MyTable
GROUP BY LocationDescription
不知道如何表达,但本质上,我想编写一个查询,输出每个 "LocationDescription" 的 MAX(StatusDateTime) 减去 MIN(StatusDateTime) 的结果,以及如果这甚至可以通过一个查询实现,那么天上掉馅饼的输出还将包括给定 LocationDescription 的总行数。
示例数据:
LocationDescription StatusDateTime
Site 1 2/6/20 10:35:34.027
Site 1 2/6/20 10:35:33.823
Site 1 2/6/20 10:35:33.183
Site 1 2/6/20 10:35:32.387
Site 2 2/6/20 10:35:53.500
Site 2 2/6/20 10:33:06.917
Site 2 2/6/20 10:33:06.300
Site 2 2/6/20 10:34:44.083
Site 2 2/6/20 10:34:52.410
Site 2 2/6/20 10:34:40.503
Site 2 2/6/20 10:34:49.710
Site 2 2/6/20 10:35:53.753
Site 3 2/6/20 10:32:38.253
Site 3 2/6/20 10:36:08.987
Site 3 2/6/20 10:36:08.013
Site 3 2/6/20 10:36:06.060
Site 3 2/6/20 10:32:45.890
理想输出(持续时间根据上面的样本数据在下面大致确定):
LocationDescription DurationDifference TotalRecords
Site 1 00:00:02.000 4
Site 2 00:02:47.000 8
Site 3 00:03:21.000 5
1 个查询是否可行?
编辑:我的最终目标是尝试说 "X number of records per second for Site 1"、"X number of records per second for Site 2" 等。这是一个基于性能的指标,我计划在仪表板上使用它来显示事情有多快正在接受健康检查。
尝试按位置描述进行聚合,然后使用 DATEDIFF
以秒为单位找出最小和最大状态时间之间的差异。
SELECT
LocationDescription,
DATEDIFF(second, MAX(StatusDateTime), MIN(StatusDateTime)) AS DurationDifference,
COUNT(*) AS TotalRecords
FROM yourTable
GROUP BY
LocationDescription;
这符合您的要求。
SELECT
LocationDescription,
DATEDIFF(seconds,MAX(StatusDateTime), MIN(StatusDateTime)) AS DurationDifference,
COUNT(*) AS TotalRecords
FROM MyTable
GROUP BY LocationDescription