Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
deMax Member Откуда: Сообщений: 3 |
Одна таблица user(строка) type(число) time Как вывести одним запросом только последние сообщения (для каждой пары user и type) меньше заданного времени? Т.е. вывести все сообщения которые меньше заданного времени и при этом нет более поздних сообщений с такими же user и type. |
15 ноя 17, 14:51 [20956324] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
SELECT T.* FROM [Одна таблица] T WHERE T.[time]<@time AND NOT EXISTS(SELECT * FROM [Одна таблица] TT WHERE TT.[user]=T.[user] AND TT.[type]=T.[type] AND TT.[time]>T.[time]) |
15 ноя 17, 15:06 [20956418] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
deMax,select top 1 with ties [user], [type], [time] from [table] where [time] < @time order by row_number() over (partition by [user], [type] order by [time] desc) |
15 ноя 17, 15:07 [20956423] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
(Я тоже поначалу так написал ![]() |
||
15 ноя 17, 15:08 [20956437] Ответить | Цитировать Сообщить модератору |
Minamoto Member Откуда: Москва Сообщений: 1162 |
Я думаю, тут косяк постановщика задачи. Если делать "Последние сообщения меньше заданного времени" - то как раз такой вариант подойдет. Если считать, что оговорка "нет более поздних сообщений с такими же user и type" - это не ошибка, а точная постановка, тогда да, ваш вариант. |
||||
15 ноя 17, 15:13 [20956460] Ответить | Цитировать Сообщить модератору |
deMax Member Откуда: Сообщений: 3 |
Спасибо большое. Да когда спрашивал забыл дописать: Т.е. вывести все сообщения которые меньше заданного времени и при этом нет более поздних сообщений с такими же user и type которые меньше этого же заданного времени. |
15 ноя 17, 16:24 [20956925] Ответить | Цитировать Сообщить модератору |
iap Member Откуда: Москва Сообщений: 47052 |
![]() |
||
15 ноя 17, 16:29 [20956945] Ответить | Цитировать Сообщить модератору |
andrey odegov Member Откуда: Сообщений: 473 |
deMax, что значит "одним запросом"? |
15 ноя 17, 20:48 [20957910] Ответить | Цитировать Сообщить модератору |
deMax Member Откуда: Сообщений: 3 |
andrey odegov, У нас человек (новичок в БД), сделал в коде c++ цикл с отправкой запроса к бд. iap, Имхо вроде однозначно написал. Из выборки всей таблицы убрать все сообщения позже заданного времени, а потом из того что останется убрать те сообщения, для которых есть сообщения с более поздним временем и такими же user и type. p.s. Мне это нужно знать, так как есть парные типы сообщений 1_on и 1_off, 2_on и 2_off... Т.е. если время 1_on больше 1_off или 1_on есть и нет 1_off, то флаг "1" включен в заданное время. Для всех пользователей мне нужно вывести состояние всех параметров на заданное время. |
16 ноя 17, 09:35 [20958691] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |