【发布时间】:2019-02-07 11:43:46
【问题描述】:
create table test_d as
SELECT price, to_date(startdate,'YYYY-MM-DD') startdate
FROM (
SELECT 632 as price,'2019-05-01' as startdate FROM DUAL UNION ALL
SELECT 649,'2019-05-02' FROM DUAL UNION ALL
SELECT 632,'2019-05-03' FROM DUAL UNION ALL
SELECT 607,'2019-05-04' FROM DUAL UNION ALL
SELECT 598,'2019-05-05' FROM DUAL UNION ALL
SELECT 624,'2019-05-06' FROM DUAL UNION ALL
SELECT 641,'2019-05-07' FROM DUAL UNION ALL
SELECT 598,'2019-05-08' FROM DUAL UNION ALL
SELECT 556,'2019-05-09' FROM DUAL UNION ALL
SELECT 480,'2019-05-10' FROM DUAL UNION ALL
SELECT 510,'2019-05-11' FROM DUAL UNION ALL
SELECT 541,'2019-05-12' FROM DUAL UNION ALL
SELECT 634,'2019-05-13' FROM DUAL UNION ALL
SELECT 634,'2019-05-14' FROM DUAL );
有一张桌子。 我想从价格最低的日期开始找到最长的连续日期序列。 所以在这种情况下
1 480 2019-05-10 1 2019-05-09 0
2 510 2019-05-11 2 2019-05-10 0
3 541 2019-05-12 3 2019-05-11 0
我已经做了什么:
SELECT t1.*,
case
when startdate = next_d + 1 then 1
else 0
end seq
FROM (SELECT t.*,
NVL(LAG(startdate) over(order by rnk asc),startdate-1) next_d
FROM (select price,
startdate,
DENSE_RANK() OVER(ORDER BY price ASC) AS RNK
from test_d) t) t1
这给了我:
1 480 2019-05-11 1 2019-05-10 1
2 510 2019-05-10 2 2019-05-11 0
3 541 2019-05-12 3 2019-05-10 0
4 556 2019-05-09 4 2019-05-12 0
5 598 2019-05-05 5 2019-05-09 0
6 598 2019-05-08 6 2019-05-05 0
7 607 2019-05-04 7 2019-05-08 0
8 624 2019-05-06 8 2019-05-04 0
9 632 2019-05-01 9 2019-05-06 0
10 632 2019-05-03 10 2019-05-01 0
11 634 2019-05-13 11 2019-05-03 0
12 634 2019-05-14 12 2019-05-13 1
13 641 2019-05-07 13 2019-05-14 0
14 649 2019-05-02 14 2019-05-07 0
如何在 SEQ 列中对序列进行分组?就像第一行获得数字 1,行 2-11 获得数字 2、12 - 3、13-14 - 0 等等? 或者也许有人对另一种方法有想法? 谢谢
【问题讨论】:
-
为什么第 2-11 行得到数字 2?他们似乎不符合我的约会顺序