SQL server LAG方法改造 适配 SQL server 2008

LAG函数 方法 需要改造为 适配 SQL server 2008 

---改造前:
        select
            area_id,
            area_name, 
            year,
            lag(cast(year as int ),1,'1970') over (partition by area_id order by year) previous_year,
            year_money,
            lag(year_money, 1, 0) over (partition by area_id order by year) previous_year_money
        from (select 
                area_id,
                area_name,
                year,
                sum(month_area_order_sale_money) as year_money 
                from dws_area_sale_analyse_month 
                WHERE dt = '2024-06-17'
                group by area_id,area_name,year) t1

---改造后:
        SELECT '2024-06-17' as dt,t1.area_id,
            t1.area_name, t1.year,
                 CASE WHEN t1_prev.year IS NULL THEN '1970' ELSE t1_prev.year END AS previous_year,t1.year_money AS year_money,
                CASE WHEN t1_prev.year_money IS NULL THEN 0 ELSE t1_prev.year_money END AS previous_year_money
        FROM  (select 
                area_id,
                area_name,
                year,
                sum(month_area_order_sale_money) as year_money 
                from dws_area_sale_analyse_month 
                WHERE dt = '2024-06-17'
                group by area_id,area_name,year) as t1
        LEFT JOIN (select 
                area_id,
                area_name,
                year,
                sum(month_area_order_sale_money) as year_money 
                from dws_area_sale_analyse_month 
                WHERE dt = '2024-06-17'
                group by area_id,area_name,year) as t1_prev
        ON t1.year > t1_prev.year AND t1.area_id = t1_prev.area_id
        WHERE  NOT EXISTS ( SELECT 1 FROM (select 
                area_id,
                area_name,
                year,
                sum(month_area_order_sale_money) as year_money 
                from dws_area_sale_analyse_month 
                WHERE dt = '2024-06-17'
                group by area_id,area_name,year) as t2 WHERE t2.area_id = t1.area_id  AND t2.year > t1_prev.year AND t2.year < t1.year)

其中 重复的sql语句 可以抽取为 with方法
WITH year_sales AS (select 
                area_id,
                area_name,
                year,
                sum(month_area_order_sale_money) as year_money 
                from dws_area_sale_analyse_month 
                WHERE dt = '2024-06-17'
                group by area_id,area_name,year)

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值