Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Вопрос по объединению строк/групп.  [new]
senn
Member

Откуда:
Сообщений: 403
Вопрос по объединению групп. Есть таблица с ценами. Если цена несколько месяцев не меняется - необъодимо объеденить ее действие в один период. Например вместо:
PART SUPP PRICE DAT_FROM DAT_TO GrNr
1004076 7050744 115.40 2010-02-01 2010-09-30 8
1004076 7050744 115.40 2010-10-01 2011-01-14 8

получить одну строку:
PART SUPP PRICE DAT_FROM DAT_TO GrNr
1004076 7050744 115.40 2010-02-01 2011-01-14 8

Часто встречается случай, когда цена в одна и та же в разные периоды, которые прерываются другими периодами, а мой запрос объединяет ее в одну группу:
PART SUPP PRICE DAT_FROM DAT_TO GrNr
1004076 7050744 115.60 2009-07-21 2010-01-31 10
1004076 7050744 115.40 2010-02-01 2010-09-30 8
1004076 7050744 115.40 2010-10-01 2011-01-14 8
1004076 7050744 109.90 2011-01-15 2011-01-19 1
1004076 7050744 120.89 2011-01-20 2011-04-14 11
1004076 7050744 120.89 2011-04-15 2012-04-26 11
1004076 7050744 120.89 2012-04-27 2012-07-26 11
1004076 7050744 120.89 2012-07-27 2013-07-31 11
1004076 7050744 109.90 2013-08-01 2014-07-18 1
1004076 7050744 109.90 2014-07-19 2014-10-27 1
1004076 7050744 109.90 2014-10-28 2014-11-30 1
1004076 7050744 109.90 2015-04-01 2015-08-31 1

т.е. четвертая строка не должна входить в группу 1, а должна быть отдельной группой со своим уникальным номером.

Мой запрос выглядит так :
SELECT    PART
        , SUPP        
        , PRICE
        , DAT_FROM
        , DAT_TO        		
	, GrNr = RANK() OVER (ORDER BY PART,SUPP, PRICE)
FROM dbo.TEST_PS
ORDER BY PART,SUPP,DAT_FROM

Вопрос, как правильно его переделать, чтобы он различал эти периоды?

Спасибо!!
30 апр 19, 12:06    [21875394]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по объединению строк/групп.  [new]
senn
Member

Откуда:
Сообщений: 403
Microsoft SQL Server 2017 (RTM-GDR) (KB4293803) - 14.0.2002.14 (X64) Jul 21 2018 07:47:45 Copyright (C) 2017 Microsoft Corporation Enterprise Edition: Core-based Licensing (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)
30 апр 19, 12:08    [21875396]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по объединению строк/групп.  [new]
Руслан Дамирович
Member

Откуда: Резиновая нерезиновая
Сообщений: 940
senn,
как-то так. лучше бы данные оформлять также в виде запросов с временными таблицами...
WITH
res AS (
  SELECT
    PART,
    SUPP,
    PRICE,
    DAT_FROM,
    DAT_TO,
    GrNr = ROW_NUMBER() OVER ( PARTITION BY PART,SUPP ORDER BY DAT_FROM )
         - ROW_NUMBER() OVER ( PARTITION BY PART,SUPP,PRICE ORDER BY DAT_FROM )
  FROM
    dbo.TEST_PS
)
SELECT
  PART,
  SUPP,
  PRICE,
  DAT_FROM = MIN( DAT_FROM ),
  DAT_TO   = MAX( DAT_TO )
FROM
  res
GROUP BY
  PART,
  SUPP,
  PRICE,
  GrNr
ORDER BY
  PART,
  SUPP,
  DAT_FROM
30 апр 19, 12:17    [21875411]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по объединению строк/групп.  [new]
senn
Member

Откуда:
Сообщений: 403
Руслан Дамирович,

Спасибо!
(про оформление: учту на будущее)
30 апр 19, 12:25    [21875419]     Ответить | Цитировать Сообщить модератору
 Re: Вопрос по объединению строк/групп.  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1466
senn,

Инвариант групп вам показали, вот ещё вариант по методу "начало группы". Для общего развития, так сказать...
30 апр 19, 18:08    [21875836]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить