如何在 SQL 服务器中找到 Max/Min 值及其发生时间?

How can I find the Max/Min value in SQL Server as well as the time it occurred at?

我有一个 table 每 10 分钟更新一次流量数据,在一天结束时我需要一个查询来生成平均流量、最小流量值和时间它发生在(与最大值相同)然后是当天的总流量。到目前为止我有这个:

SELECT *
FROM [WS6].[dbo].[MasterData]
Where [_Datetime] between '2015-07-06' and '2015-07-06 23:59:59'

这为我提供了全天的数据,但我如何筛选出我需要的值?谢谢

这取决于您尝试获取最小值和最大值的内容。例如,如果您试图在这些日期之间获取字段的最小值和最大值,您将执行类似这样的操作,其中 _field 是您想要其值的字段(将 return 1 行或无行):

SELECT MIN(_field) AS 'MIN', MAX(_field) AS 'MAX'
FROM [WS6].[dbo].[MasterData]
Where [_Datetime] between '2015-07-06' and '2015-07-06 23:59:59'

如果您正在尝试获取由另一个字段分组的许多字段的最小值和最大值,您可以尝试这样的操作(可能 return 许多行、1 行或没有行)。

SELECT Group_by_field, MIN(_field) AS 'MIN', MAX(_field) AS 'MAX'
FROM [WS6].[dbo].[MasterData]
Where [_Datetime] between '2015-07-06' and '2015-07-06 23:59:59'
Group by Group_by_field

如果您提供示例 table 和您想要执行的操作的示例输出,将会很有帮助。

在 SQL Server 2012 中,您可以使用 first_value():

SELECT avg(flow), min(flow), max(flow), sum(flow),
       first_value(_DateTime) over (order by flow asc) as minTime,
       first_value(_DateTime) over (order by flow desc) as maxTime
FROM [WS6].[dbo].[MasterData]
Where [_Datetime] >= '2015-07-06' and [_Datetime]  < '2015-07-07';

在早期版本中,您可以使用 window 函数或 cross apply