【发布时间】:2019-07-09 03:10:50
【问题描述】:
我有一张桌子:
表1
tran_id user_id start_date end_date
1 100 01-06-2018 18-06-2018
2 100 14-06-2018 14-06-2018
4 100 19-07-2018 19-07-2018
7 101 05-01-2018 06-01-2018
9 101 08-01-2018 08-01-2018
3 101 03-01-2018 03-01-2018
演示 - Link
逻辑如下:
我需要为一个按 start_date 排序的成员查找两个 trans_id 之间的天差,其中没有重叠的 start_date 和 end_date。
我们需要检查用户一次处理一条记录的最大 end_date。
逻辑是:
对于会员:
- 按
user_id和start_date对所有记录进行排序 -
trans_id= 1,end_date= 18-06-2018 , 设置max_end_date= 18-06-2018 -
trans_id= 2,end_date= 14-06-2018,end_datemax_end_date, 继续前进 -
trans_id= 3,end_date= 19-07-2018,end_date>max_end_date,在输出中添加一条记录-
transidfrom= 1(因为这是max_end_date的记录) -
transidto= 4(因为这是end_date>max_end_date的记录) -
transidfrom_end_date= 18-06-2018,选择end_date的trans_id的transidfrom -
transidto_start_date= 19-07-2018,选择start_date的trans_id的transidto -
datediff=transidto_start_date-transidfrom_end_date
-
输出如下:
表2
my_id transidfrom transidto transidfrom_end_date transidto_start_date datediff
1 1 4 18-06-2018 19-07-2018 31
2 3 7 03-01-2018 05-01-2018 2
3 7 9 06-01-2018 08-01-2018 2
有没有办法在 Oracle SQL in 1 query 中做到这一点?
【问题讨论】: