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

Есть таблица в которой содержится идентификатор клиента и значение 0 или 1

Client_id int
Val tinyint

Пример данных:
Client_id Val
587 0
587 0
587 1
587 1
587 1
587 0
587 1
587 0

588 0
588 0
588 0

589 1
589 1
589 1
589 0


Каким образом можно проделать следующую нумерацию (N) - номер изменяется в том случае если меняется значение Val, если значение не изменилось номер остается прежним

Результат:

Client_id Val N
587 0 1
587 0 1
587 1 2
587 1 2
587 1 2
587 0 3
587 1 4
587 0 5

588 0 1
588 0 1
588 0 1

589 1 1
589 1 1
589 1 1
589 0 2


Получается пронумеровать при помощи lead и lag, но возможно есть какой то более высокопроизводительный способ? тк в таблице порядка 2 миллиардов записей
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39729388
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmskПолучается пронумеровать при помощи lead и lag, но возможно есть какой то более высокопроизводительный способ?Нет
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39729392
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
assmskДобрый день,

Есть таблица в которой содержится идентификатор клиента и значение 0 или 1

Client_id int
Val tinyint

Пример данных:
Client_id Val
587 0
587 0
587 1
587 1
587 1
587 0
587 1
587 0

588 0
588 0
588 0

589 1
589 1
589 1
589 0


Каким образом можно проделать следующую нумерацию (N) - номер изменяется в том случае если меняется значение Val, если значение не изменилось номер остается прежним

Результат:

Client_id Val N
587 0 1
587 0 1
587 1 2
587 1 2
587 1 2
587 0 3
587 1 4
587 0 5

588 0 1
588 0 1
588 0 1

589 1 1
589 1 1
589 1 1
589 0 2


Получается пронумеровать при помощи lead и lag, но возможно есть какой то более высокопроизводительный способ? тк в таблице порядка 2 миллиардов записейЧто определяет порядок записей? Ваш рисунок? И сервер в него заглядывает что ли?
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39732973
nikit_ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Помогите, пожалуйста.
Проблема такая:
есть таблица (MS SQL), например:

ip| name| stat| date
10.10.10.1| aaa| 1| 01.10.2018
10.10.10.2| ввв| 1| 01.10.2018
10.10.10.3| ссс| 1| 01.10.2018
10.10.10.1| aaa| 2| 03.10.2018
10.10.10.2| ввв| 7| 03.10.2018
10.10.10.1| aaa| 3| 08.10.2018
10.10.10.4| ddd| 5| 08.10.2018

Нужно выбрать уникальные IP с максимальной датой, т.е. результат запроса д.б:
10.10.10.1| aaa| 3| 08.10.2018
10.10.10.2| ввв| 7| 03.10.2018
10.10.10.3| ссс| 1| 01.10.2018
10.10.10.4| ddd| 5| 08.10.2018

Спасибо!
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39733052
_human
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikit_ka,

group by + max
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39733106
nikit_ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_human,

Спасибо!
Но это понятно, когда нужно выбирать 2 поля, т.е.
select ip, max(date) from aaa group by ip

как к этому прицепить остальные поля записи с максимальной датой (name, stat и еще куча)?

есть конечно мысль, но не красиво получается, например:

select * from aaa where ip+date in (select ip+max(date) from aaa group by ip)

думается, что есть более верное решение
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39733111
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikit_ka,

поищите по форуму, вопрос много раз поднимался.
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39733114
iiyama
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nikit_ka,
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
declare @t table(ip varchar(20), name varchar(20) ,stat int, [date] date)
insert into @t values
('10.10.10.1','aaa', 1,'01.10.2018'),
('10.10.10.2','ввв', 1,'01.10.2018'),
('10.10.10.3','ссс', 1,'01.10.2018'),
('10.10.10.1','aaa', 2,'03.10.2018'),
('10.10.10.2','ввв', 7,'03.10.2018'),
('10.10.10.1','aaa', 3,'08.10.2018'),
('10.10.10.4','ddd', 5,'08.10.2018'),
('10.10.10.4','eee', 5,'08.10.2018')

select * from 
(
select RANK() OVER(partition by ip ORDER BY [date] DESC) as rnk, * from @t
)T
where rnk=1
...
Рейтинг: 0 / 0
Помощь в написании запроса
    #39733342
nikit_ka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iiyama,

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


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