用于汇总数据的 SQL 聚合/窗口函数

Posted

技术标签:

【中文标题】用于汇总数据的 SQL 聚合/窗口函数【英文标题】:SQL Aggregation / Window Function for Summarizing Data 【发布时间】: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 一定是正确的。是什么导致您按测试年份进行分区。您应该相应地提供示例数据。 【参考方案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 

【讨论】:

以上是关于用于汇总数据的 SQL 聚合/窗口函数的主要内容,如果未能解决你的问题,请参考以下文章

详解SQL操作的窗口函数

MySQL窗口函数_聚合函数

窗口函数

sql中的 开窗函数over() 聚合函数 排名函数

结合实例来分析SQL的窗口函数

HiveSQL核心技能之窗口计算