SQL-如何分组记录

时间:2019-04-10 14:59:26

标签: sql-server

我需要将项目分成连续的组:


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语句的情况。

0 个答案:

没有答案