powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Вопрос по объединению строк/групп.
5 сообщений из 5, страница 1 из 1
Вопрос по объединению строк/групп.
    #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
Вопрос по объединению строк/групп.
    #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
Вопрос по объединению строк/групп.
    #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
Вопрос по объединению строк/групп.
    #39808257
senn
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руслан Дамирович,

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

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


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