Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по объединению строк/групп. / 5 сообщений из 5, страница 1 из 1
30.04.2019, 12:06
    #39808244
senn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по объединению строк/групп.
Вопрос по объединению групп. Есть таблица с ценами. Если цена несколько месяцев не меняется - необъодимо объеденить ее действие в один период. Например вместо:
PART SUPP PRICE DAT_FROM DAT_TO GrNr1004076 7050744 115.40 2010-02-01 2010-09-30 81004076 7050744 115.40 2010-10-01 2011-01-14 8
получить одну строку:
PART SUPP PRICE DAT_FROM DAT_TO GrNr1004076 7050744 115.40 2010-02-01 2011-01-14 8
Часто встречается случай, когда цена в одна и та же в разные периоды, которые прерываются другими периодами, а мой запрос объединяет ее в одну группу:
PART SUPP PRICE DAT_FROM DAT_TO GrNr1004076 7050744 115.60 2009-07-21 2010-01-31 101004076 7050744 115.40 2010-02-01 2010-09-30 81004076 7050744 115.40 2010-10-01 2011-01-14 81004076 7050744 109.90 2011-01-15 2011-01-19 11004076 7050744 120.89 2011-01-20 2011-04-14 111004076 7050744 120.89 2011-04-15 2012-04-26 111004076 7050744 120.89 2012-04-27 2012-07-26 111004076 7050744 120.89 2012-07-27 2013-07-31 111004076 7050744 109.90 2013-08-01 2014-07-18 11004076 7050744 109.90 2014-07-19 2014-10-27 11004076 7050744 109.90 2014-10-28 2014-11-30 11004076 7050744 109.90 2015-04-01 2015-08-31 1
т.е. четвертая строка не должна входить в группу 1, а должна быть отдельной группой со своим уникальным номером.

Мой запрос выглядит так :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
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


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

Спасибо!!
...
Рейтинг: 0 / 0
30.04.2019, 12:08
    #39808245
senn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по объединению строк/групп.
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)
...
Рейтинг: 0 / 0
30.04.2019, 12:17
    #39808251
Руслан Дамирович
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по объединению строк/групп.
senn,
как-то так. лучше бы данные оформлять также в виде запросов с временными таблицами...
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
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
...
Рейтинг: 0 / 0
30.04.2019, 12:25
    #39808257
senn
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по объединению строк/групп.
Руслан Дамирович,

Спасибо!
(про оформление: учту на будущее)
...
Рейтинг: 0 / 0
30.04.2019, 18:08
    #39808483
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Вопрос по объединению строк/групп.
senn,

Инвариант групп вам показали, вот ещё вариант по методу " начало группы ". Для общего развития, так сказать...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по объединению строк/групп. / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]