我需要将项目分成连续的组:
SUP_id Item from to restult 1 A_3 2019-01-11 2019-12-06 1 1 A_3 2019-01-11 2019-02-17 1 1 A_3 2019-01-08 2019-01-10 1 1 A_2 2018-10-06 2019-01-07 2 1 A_2 2018-12-04 2019-01-07 2 1 A_2 2018-10-06 2018-12-03 2 1 A_3 2018-04-21 2018-10-05 3 1 A_3 2018-04-16 2018-10-05 3 1 A_3 2018-08-26 2018-10-05 3 1 A_3 2018-04-16 2018-08-25 3 1 A_3 2018-04-16 2018-06-09 3 1 A_2 2018-02-25 2018-04-15 4 1 A_2 2018-01-02 2018-04-15 4 2 A_2 2018-01-02 2018-02-24 4 2 A_2 2018-01-02 2018-02-01 4
已经尝试row_number()
,rank()
。不幸的是,尽管我使用的是SQL Server 2012,但我既不能使用lag()
也不能使用lead()
。
最近,我想到了使用类似的方法:
WITH ab AS
(
SELECT SUP_id, Item, date_from, date_to,
rownum = ROW_NUMBER() OVER (PARTITION BY SUP_id ORDER BY data_do DESC)
FROM #as_ a
)
SELECT ab.*, nex.Item next_Item,
RANK() OVER (PARTITION BY ab.SUP_id ORDER BY ab.Item DESC) r2,
CASE WHEN ab.Item = nex.Item THEN 1 ELSE 0 END AS x
FROM ab
LEFT JOIN ab nex
ON ab.rownum+1 =nex.rownum
ORDER BY date_to DESC
其背后的想法是找到组中的最后一行,并以此为基础进行一些计算。然后我陷入了没有if语句的情况。