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)

相关推荐

  1. SQL server LAG方法改造 SQL server 2008

    2024-06-18 19:18:03       7 阅读
  2. 移动端方案

    2024-06-18 19:18:03       12 阅读
  3. 大屏方案(vw、vh)

    2024-06-18 19:18:03       32 阅读
  4. 【Android】App 屏幕方案

    2024-06-18 19:18:03       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-18 19:18:03       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-18 19:18:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-18 19:18:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-18 19:18:03       18 阅读

热门阅读

  1. 【DNS】

    2024-06-18 19:18:03       5 阅读
  2. Python 正则表达式语法

    2024-06-18 19:18:03       5 阅读
  3. 编程入门笔记:从基础到进阶的探索之旅

    2024-06-18 19:18:03       5 阅读
  4. BSP驱动教程-CAN/CANFD/CANopen知识点总结分享

    2024-06-18 19:18:03       5 阅读
  5. 实习日记(一)

    2024-06-18 19:18:03       6 阅读