我有一张桌子
table1
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,user_id
= max_end_date
= 2,end_date
= 14-06-2018,end_date
< max_end_date
,move max_end_date
= 3,end_date
= 19-07-2018,<user_id
>D22 max_end_date
,在transidfrom
=1的输出中添加一条记录(因为这是max_end_date
)transidto
=4的记录(因为这是transidfrom
transidto_start_date
> max_end_date
)transidfrom_end_date
= 18-06-2018的记录,所以选择transidfrom
transidto_start_date
= 19-07-2018的trans_id
的trans_id
,选择transidfrom_end_date
= trans_id
- transidto_start_date
的trans_id
的start_date
输出将如下所示:
table2
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中,有没有一种方法可以在一个查询中做到这一点?
https://stackoverflow.com/questions/56940002
复制相似问题