powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ранжирование
6 сообщений из 6, страница 1 из 1
Ранжирование
    #39611908
assmsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день! Не удалось погуглить, так как не знаю как сформулировать такой запрос в поисковик))


Например есть таблица т (dt date, name varchar(3), val varchar(1) )

2018-01-01 'aaa' 'Y'
2018-01-03 'aaa' 'N'
2018-01-04 'aaa' 'N'
2018-01-05 'aaa' 'N'
2018-01-06 'aaa' 'Y'
2018-01-07 'aaa' 'Y'
2018-01-08 'aaa' 'Y'
2018-01-09 'aaa' 'N'
2018-01-03 'bbb' 'Y'
2018-01-04 'bbb' 'Y'
2018-01-05 'bbb' 'N'
2018-01-06 'bbb' 'Y'
2018-01-07 'bbb' 'N'

Как без подзапросов пронумеровать ее таким образом:

2018-01-01 'aaa' 'Y' 1
2018-01-03 'aaa' 'N' 2
2018-01-04 'aaa' 'N' 2
2018-01-05 'aaa' 'N' 2
2018-01-06 'aaa' 'Y' 3
2018-01-07 'aaa' 'Y' 3
2018-01-08 'aaa' 'Y' 3
2018-01-09 'aaa' 'N' 4
2018-01-03 'bbb' 'Y' 1
2018-01-04 'bbb' 'Y' 1
2018-01-05 'bbb' 'N' 2
2018-01-06 'bbb' 'Y' 3
2018-01-07 'bbb' 'N' 4

Те счетчик прибавляется когда меняется val
...
Рейтинг: 0 / 0
Ранжирование
    #39611913
assmsk,

Ищи тут, на форуме: start_of_group
...
Рейтинг: 0 / 0
Ранжирование
    #39611942
Руслан Дамирович
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
31.
32.
33.
34.
35.
36.
37.
DECLARE 
  @t TABLE (
    [date] DATE, 
    [name] VARCHAR(3),
    [val] VARCHAR(1) )
;
INSERT INTO @t
VALUES
  ( '2018-01-01', 'aaa', 'Y' ),
  ( '2018-01-03', 'aaa', 'N' ),
  ( '2018-01-04', 'aaa', 'N' ),
  ( '2018-01-05', 'aaa', 'N' ),
  ( '2018-01-06', 'aaa', 'Y' ),
  ( '2018-01-07', 'aaa', 'Y' ),
  ( '2018-01-08', 'aaa', 'Y' ),
  ( '2018-01-09', 'aaa', 'N' ),
  ( '2018-01-03', 'bbb', 'Y' ),
  ( '2018-01-04', 'bbb', 'Y' ),
  ( '2018-01-05', 'bbb', 'N' ),
  ( '2018-01-06', 'bbb', 'Y' ),
  ( '2018-01-07', 'bbb', 'N' )
;
WITH
t AS (
  SELECT
    *,
    [gr] = ROW_NUMBER() OVER ( PARTITION BY [name] ORDER BY [date] )
         - ROW_NUMBER() OVER ( PARTITION BY [name], [val] ORDER BY [date] )
  FROM
    @t
)
SELECT
  *,
  [rn] = DENSE_RANK() OVER ( PARTITION BY [name] ORDER BY [gr] )
FROM
  t
;
...
Рейтинг: 0 / 0
Ранжирование
    #39611976
assmsk,

таки решение на start_of_group (требуется MS SQL Server 2012 и выше):

Код: 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.
DECLARE 
  @t TABLE (
    [date] DATE, 
    [name] VARCHAR(3),
    [val] VARCHAR(1) )
;
INSERT INTO @t
VALUES
  ( '2018-01-01', 'aaa', 'Y' ),
  ( '2018-01-03', 'aaa', 'N' ),
  ( '2018-01-04', 'aaa', 'N' ),
  ( '2018-01-05', 'aaa', 'N' ),
  ( '2018-01-06', 'aaa', 'Y' ),
  ( '2018-01-07', 'aaa', 'Y' ),
  ( '2018-01-08', 'aaa', 'Y' ),
  ( '2018-01-09', 'aaa', 'N' ),
  ( '2018-01-03', 'bbb', 'Y' ),
  ( '2018-01-04', 'bbb', 'Y' ),
  ( '2018-01-05', 'bbb', 'N' ),
  ( '2018-01-06', 'bbb', 'Y' ),
  ( '2018-01-07', 'bbb', 'N' )
;

SELECT *
     , x_dense_rank = sum([Start_Of_Group]) over(partition by name order by date)
  FROM (
         SELECT *
              , [Start_Of_Group] = case when lag(val) over(partition by name order by date) = val then 0 else 1 end 
           FROM @t
       ) t;
...
Рейтинг: 0 / 0
Ранжирование
    #39611980
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не взлетит, ТС не указал , что за счётчик, может он в таблице его хочет апдейтить.
а если это в запросе, то где параметры сортировки?
...
Рейтинг: 0 / 0
Ранжирование
    #39611990
Konst_One,

ты как первый день на форуме.... тут добрые 99% вопроса задаются в такой манере.
тебе, СКОРЕЕ ВСЕГО, нужно как следует "прокачивать хрустальный шар".
больше чем уверен - ТС просил именно то, что получил...

но если буйно фантазировать, то да - можно и до «Главного вопроса жизни, вселенной и всего такого» договориться...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ранжирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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