[英]SQL - lag variable creation using window function
你可以用这个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.