【问题标题】:How can I find the Max/Min value in SQL Server as well as the time it occurred at?如何在 SQL Server 中找到 Max/Min 值以及它发生的时间?
【发布时间】:2015-07-10 15:16:20
【问题描述】:

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

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

这可以让我获得一整天的数据,但我如何过滤我需要的值?谢谢

【问题讨论】:

  • 你需要描述你的表、字段、数据类型等。
  • 我使用的是 2008 表,该表提供了 144 个条目(从它所连接的 SCADA 每 10 分钟更新一次的流),它们是实型整数。

标签: sql sql-server date time


【解决方案1】:

在 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';

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

【讨论】:

  • first_value() 在 SQL Server 2012 中也可用
  • @HingeSight 。 . .谢谢你。解决了这个问题。
【解决方案2】:

这取决于您尝试获取的最小值和最大值。例如,如果您试图获取这些日期之间字段的最小值和最大值,您可以执行以下操作,其中 _field 是您想要的值的字段(将返回 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'

如果您试图获取由另一个字段分组的许多字段的最小值和最大值,您可以尝试这样的操作(可能返回许多行、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

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

【讨论】:

  • 我想附上我桌子的截图给你们看,但它说我需要至少 10 声望才能附上图片...
  • 只需将其从 MMC 中复制并粘贴到代码块中即可,不必漂亮,足以让我们弄清楚您的目标!
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-24
  • 2015-04-14
  • 2017-06-10
相关资源
最近更新 更多