【问题标题】:MAX - MIN for each day in SQLSQL 中每天的 MAX - MIN
【发布时间】:2017-01-25 01:03:52
【问题描述】:

我正在使用 SQL Server。我正在从各种表格中获取信息,并且我能够做到。

在我的表中,我有 sampletime 列,每 30 分钟一次,还有一个值列。我想写一个查询来获取每天的差异(最大-最小),有什么建议可以做到吗?

例如:

SIGNAL NAME     SAMPLETIME                  VALUE
Spazio-Percorso 2014-03-06 15:01:50.3170000 219345  
Spazio-Percorso 2014-03-06 15:31:50.3260000 219384  
Spazio-Percorso 2014-03-06 16:01:50.3380000 219388  
Spazio-Percorso 2014-03-06 16:31:50.3460000 219388  
Spazio-Percorso 2014-03-06 17:01:50.3590000 219400  
Spazio-Percorso 2014-03-06 17:31:50.3690000 219434  
Spazio-Percorso 2014-03-06 18:01:50.3760000 219471

在此示例中,所有行都来自同一天,我想要的是每天只有 1 行,并且在 value 列中想要当天的 MAX-MIN

【问题讨论】:

  • SQL Server 的哪个版本?
  • MSSQL 管理工作室 2008
  • @Furqan SQL Server 有什么问题?只是你使用过时的管理工作室并不意味着服务器也落后了 2 代。

标签: sql sql-server sql-server-2008 tsql


【解决方案1】:

试试这个

SELECT [SIGNAL NAME], CAST(SAMPLETIME AS DATE) AS SAMPLEDATE, MAX(VALUE)-MIN(VALUE) As Diff_Value
FROM Table1
GROUP BY CAST(SAMPLETIME AS DATE),[SIGNAL NAME]

【讨论】:

  • 在您选择的SAMPLETIME 交换中使用CAST(SAMPLETIME AS DATE)
  • thanx 示例,但例如,如果我们在示例时间为 7th March 的示例中添加更多行,则此查询是否会为我提供 2 行结果,每天一行?
【解决方案2】:

如果您使用的是 SQL Server 2008 或更高版本,您可以将 datetime 列转换为 DATE 以去掉时间值:

SELECT 
    [SIGNAL NAME], 
    CAST(SAMPLETIME AS DATE) AS SAMPLEDATE, 
    MAX(VALUE) - MIN(VALUE) AS VALUE
FROM Table1
GROUP BY [SIGNAL NAME], CAST(SAMPLETIME AS DATE)

【讨论】:

  • 其实我不想有最大值和最小值,我想区分它们是 max()-Min()
  • 这个查询会给我每天的最大值减去最小值吗?我的意思是,由于今天的价值总是增长的最大值是明天的最小值,它是否考虑到这一点?
猜你喜欢
  • 2017-08-27
  • 1970-01-01
  • 1970-01-01
  • 2017-08-06
  • 1970-01-01
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 2019-12-24
相关资源
最近更新 更多