sql两张表关联按表日期取最近

需求:按照两个表的日期找到相对应b表的结束时间减去b表的开始时间查询相关相减的值,

在关联a表最接近b开始的时间进行关联

                     

id time group                xxx
1 2022-01-01     xx:xx:xx 1 xx
2 2022-01-01     xx:xx:xxxx 2 x'x'xxx

tstate state
2022-01-01     xx:xx:xx 1        结束        
2022-01-01     xx:xx:xx 0          开始

1.用b表的结束时间减去b表的时间查询相关相减的值。

使用lag开窗函数进行处理,取下一条 然后在取值时候取mod(2=0)的数据 ,注意开窗使用的字段是否正确,

select  row_number() over (partion by xx over by xx) rn

from 

(select  state, lag(time,1) over (partion by xxx over by xx  ) state1  from dual where state != state1)--这里是清洗数据   ,由于开始结束有错误的有连续  111 或者 00这种去掉

where mod(rn,2)  --由于lag函数 只是需要取取模2等0的偶数数据

2.由于要关联表a 找最近数据

使用min获取时间或者max获取时间
 

select  max(a.time),b.time from a

left join  b

on  a.xx =b.xx
and a.time < b.time
group by  xxx

 

你可能感兴趣的:(sql,数据库,mysql)