Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Ранжирование / 6 сообщений из 6, страница 1 из 1
07.03.2018, 15:24
    #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
07.03.2018, 15:35
    #39611913
Ранжирование
assmsk,

Ищи тут, на форуме: start_of_group
...
Рейтинг: 0 / 0
07.03.2018, 16:31
    #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
07.03.2018, 17:34
    #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
07.03.2018, 17:42
    #39611980
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ранжирование
не взлетит, ТС не указал , что за счётчик, может он в таблице его хочет апдейтить.
а если это в запросе, то где параметры сортировки?
...
Рейтинг: 0 / 0
07.03.2018, 17:55
    #39611990
Ранжирование
Konst_One,

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

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


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