如何用T-SQL按LocationKey查询单日最高GrossSales日期及金额
按LocationKey查询单日最高GrossSales的解决方案
最简便的方法是使用窗口函数,通过ROW_NUMBER()或RANK()按门店分组后对销售额排序,筛选出每组的Top1记录。以下是完整脚本:
WITH daily_sales_summary AS ( SELECT DateKey, LocationKey, SUM(GrossSales) AS daily_gross_sales FROM dataset GROUP BY DateKey, LocationKey ), ranked_sales AS ( SELECT *, ROW_NUMBER() OVER (PARTITION BY LocationKey ORDER BY daily_gross_sales DESC) AS sales_rank FROM daily_sales_summary ) SELECT DateKey, LocationKey, daily_gross_sales FROM ranked_sales WHERE sales_rank = 1;
脚本说明:
- daily_sales_summary:先计算每个
LocationKey(门店)每日的总销售额,和你最初的分组逻辑一致。 - ranked_sales:用
ROW_NUMBER()窗口函数,按LocationKey分组,对每组内的daily_gross_sales降序排名,销售额最高的记录会被标记为sales_rank = 1。- 如果需要保留同一门店单日销售额并列最高的多条记录,可将
ROW_NUMBER()替换为RANK()。
- 如果需要保留同一门店单日销售额并列最高的多条记录,可将
- 最后筛选出
sales_rank = 1的记录,即可得到每个门店单日最高销售额的对应日期和金额。
你之前的第二个脚本问题在于,子查询取的是所有门店中的全局最高销售额,而非每个门店自身的最高值,因此只能返回一条全局最高记录,窗口函数则可以精准按门店分组处理需求。
内容的提问来源于stack exchange,提问作者Conor
相关产品推荐
相关产品推荐

