繁体   English   中英

SQL查询以检查下一行值是否相同或不同

[英]SQL query to check if the next row value is same or different

我将基于共同的列date联接两个表。 但是,在这种情况下,我尝试从一个表( cmg )获取的列仅在下一行的值与其上一行的值不同时才应获取。

表A

Date            comp.no
-----------------------
2019-03-08        5
2019-02-26        5
2019-01-17        5
2019-01-10        5
2018-12-27        5

表B

    Date         cmg
    -----------------
2019-07-17  NULL

2019-04-20  NULL
2019-02-26  RHB
2019-01-19  NULL
2019-01-17  RHB
2019-01-10  RMB
2018-12-28  NULL
2018-12-27  RHB
2018-12-12  RUB
2018-11-28  RUB
2018-10-20  NULL
2018-07-21  NULL
2018-04-21  NULL
2018-01-20  NULL
2017-10-21  NULL
2017-07-29  NULL
2017-05-07  NULL
2017-02-13  NULL
2016-11-22  NULL
2016-08-29  NULL
2016-06-07  NULL
2016-04-06  RUB
2016-03-21  RUB
2016-03-07  RUB

您可以使用滞后功能与之前的值进行比较。 对于第一行,您将需要进行一次isnull()检查,因为第一行将没有先前的值。

;with cte as(
select case 
when  isnull(lag(t2.cmg)over (order by t2.cmg desc),'') <>t2.cmg then 1 else 0 end as isresult
,t2.date,t2.cmg
 from TableA t1
inner join TableB t2
on  t1.date=t2.date
)
select date,cmg from cte where isresult=1

使用lag()

select date, cmg
from (select b.date, b.cmg, lag(b.cmg) over (order by b.date) as prev_cmg
      from a join
           b
           on a.date = b.date
     ) b
where prev_cmg is null or prev_cmg <> cmg
order by date;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM