簡體   English   中英

SQL 具有多個分區的滯后和超前

[英]SQL Lag and Lead With Mutiple Partitions

我有以下查詢,我試圖使用LAG function 顯示上個月的值。 因為我還包括年份,所以我試圖按年份和月份對數據進行分區。 但是,這將返回 null。 如果我將分區限制為一年,我會得到上個月的 2 月 - 12 月的值,但第二年的 1 月是 null 而不是 12 月的值(如圖所示)

有沒有辦法在仍然使用 LAG 和 LEAD window 功能的同時做到這一點?

;WITH CTE (Yy, Mm, NetTotal)
AS (
    SELECT 
        DATEPART(yy, o.OrderDate) Yy,
        DATEPART(mm, o.OrderDate) Mm,
        SUM(ol.Quantity * ol.UnitPrice)
        FROM Sales.Orders o
        INNER JOIN Sales.OrderLines ol on ol.OrderId = o.OrderId
        GROUP BY 
        DATEPART(yy, o.OrderDate),
        DATEPART(mm, o.OrderDate)

)

select 
Yy,
Mm,
NetTotal,
SUM(NetTotal) OVER (PARTITION BY Yy) AnnualTotal,
SUM(NetTotal) OVER (PARTITION BY Yy, Mm) MonthlyTotal,
LAG(NetTotal, 1) OVER (PARTITION BY YY, mm ORDER BY YY, Mm)
from CTE
order by Yy, Mm

在此處輸入圖像描述

運行 WideWorldImporters 示例數據庫,如果有幫助的話。

從您所說的來看,您根本不需要partition by ,只需按以下order by

LAG(NetTotal) OVER (ORDER BY YY, Mm)

LAG()不需要1 ,因為這是默認設置。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM