【问题标题】:SQL Aggregation / Window Function for Summarizing Data用于汇总数据的 SQL 聚合/窗口函数
【发布时间】:2015-03-11 03:31:59
【问题描述】:

我想创建一个查询来执行以下操作,但我遇到了问题:

我有一个包含列的数据库表:

  • TestYear(整数,例如 2014)
  • 日期(日期,即给定年份的一组日期)
  • 每日最差值
  • RunningValue

主键是TestYear + Date

我想得到:

  • LAST RunningValue 按日期排序(即最终值)
  • MINIMUM WorstValue(即最差值)
  • 每测试年

这基本上是每个测试年的单行摘要。是否可以使用窗口函数来做到这一点?非常感谢您提供的任何帮助。

【问题讨论】:

  • 您可以使用First_Value 或Last_Value 来获取Last Running 值和Minimum Worst Value。Per Test Year 不清楚。
  • 谢谢,所以我想要类似以下内容:SELECT MIN(WorstValue), LAST_VALUE(RunningValue) OVER (PARTITION BY TestYear ORDER BY Date) FROM MyTable GROUP BY TestYear 但这不起作用
  • 我认为您的 RunningValue 一定是正确的。是什么导致您按测试年份进行分区。您应该相应地提供示例数据。

标签: sql sql-server sql-server-2014 window-functions


【解决方案1】:

我不知道为什么你需要 window 函数来做这个只是 aggregate 函数会为你完成这项工作

SELECT testyear, 
       MIN_DailyWorstValue = Min(dailyworstvalue), 
       RV.last_runningvalue 
FROM   db_table A 
       CROSS apply (SELECT TOP 1 Last_RunningValue= runningvalue 
                    FROM   db_table B 
                    WHERE  A.testyear = B.testyear 
                    ORDER  BY date DESC) RV 
GROUP  BY testyear, 
          RV.last_runningvalue 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多