簡體   English   中英

SQL - 使用窗口函數創建滯后變量

[英]SQL - lag variable creation using window function

我每天都有一些城市級別的數據。 我必須按月級別(每個月的第一天)匯總這些數據,然后根據從一個月的第一天開始的最后 1 周創建滯后變量。

輸入數據

我使用以下代碼創建了過去 1 個月的滯后變量(在按月級別匯總數據之后(每月的第一個日期)

sum(count) over (partition by City order by month_date rows between 1 preceding  and 1 preceding) as last_1_month_count

有沒有辦法使用窗口函數按月匯總數據並根據過去 7、14、21、28 天創建滯后變量?

你可以用這個L

select 
    CITY
    , month(Date)
    , year(date)
    , sum(count)

from table1
where date < Datediff(days , 7 , getdate())
group by 
    City
    , month(Date)
    , year(date)

我想你正在尋找這樣的東西。 第一個 cte 將城市計數匯總到日、周、月、年。 第二個總結了周、月、年的計數。 要從第 1 天開始按周對銷售額進行分組,它使用 DAY 函數以及 YEAR 和 MONTH。 由於 DAY 返回整數,因此可以通過除以 7 來創建不同周的組,即 DAY(day_dt)/7。

獲得前一周銷售額的一種方法是將周銷售額摘要 cte 加入到自身中,其中一周被 -1 抵消。 由於前一周可能有 0 個銷售,因此 LEFT JOIN 似乎比使用 LAG imo 更安全

with 
day_sales_cte(city, day_dt, yr, mo, wk, sum_count) as (
    select city, day_dt, year(day_dt), month(day_cte), day(day_dt)/7, sum([count]) sum_counts
    from city_level_data
    group by city, day_dt, year(day_dt), month(day_cte), day(day_dt)/7)
wk_sales_cte(city, yr, mo, wk, sum_count) as (
    select city, yr, mo, wk, sum(sum_counts) sum_counts
    from sales_cte
    group by city, yr, mo, wk)
select ws.*, ws2.sum_sales prior_wk_sales
from wk_sales_cte ws
     left join wk_sales_cte ws2 on ws.city=ws2.city
                                   and ws.yr=ws2.yr
                                   and ws.mo=ws2.mo
                                   and ws.wk=ws.wk-1;

暫無
暫無

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

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