SQL - как группировать записи - PullRequest
0 голосов
/ 10 апреля 2019

Мне нужно разделить пункты на последовательные группы:


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().К сожалению, я не могу использовать ни lag(), ни lead(), хотя я использую SQL Server 2012. Недавно у меня возникла идея использовать что-то подобное:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...