Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Peretcz Member Откуда: Сообщений: 2 |
Доброго времени суток! Имеется проблема (собственно поэтому я тут): Пример: ID Событие Дата 1 Какое-то событие 22.05.2019 1 Какое-то событие 22.05.2019 1 Нужное событие 23.05.2019 1 Последние событие 25.05.2019 2 Какое-то событие 02.12.2017 2 Нужное событие 04.12.2017 2 Последние событие 06.12.2017 3 Какое-то событие 10.09.2018 3 Какое-то событие 10.09.2018 3 Какое-то событие 13.09.2018 3 Нужное событие 15.09.2018 3 Последние событие 17.09.2018 Собственно не могу понять, как мне вытащить все строки с предпоследним событием каждого айдишники, по одному определенному получается, а массово не могу допереть. Просьба помочь. |
29 июл 19, 21:35 [21937255] Ответить | Цитировать Сообщить модератору |
SERG1257 Member Откуда: Сообщений: 2825 |
https://docs.microsoft.com/en-us/sql/t-sql/functions/row-number-transact-sql?view=sql-server-2017 select * from ( SELECT ROW_NUMBER() OVER(PARTITION BY id ORDER BY Дата DESC) AS RowNum, ID, Событие, Дата FROM yourTable ) as t where RowNum=2 |
29 июл 19, 21:57 [21937272] Ответить | Цитировать Сообщить модератору |
londinium Member Откуда: Киев Сообщений: 1195 |
USE master GO WITH CTE(ID,EVENTT,EVENTDATE) AS ( SELECT 1,'Какое-то событие','20190522' UNION ALL SELECT 1,'Какое-то событие','20190522' UNION ALL SELECT 1,'Нужное событие','20190523' UNION ALL SELECT 1,'Последние событие','20190525' UNION ALL SELECT 2,'Какое-то событие','20171202' UNION ALL SELECT 2,'Нужное событие','20171204' UNION ALL SELECT 2,'Последние событие','20171206' UNION ALL SELECT 3,'Какое-то событие','20180910' UNION ALL SELECT 3,'Какое-то событие','20180910' UNION ALL SELECT 3,'Какое-то событие','20180910' UNION ALL SELECT 3,'Нужное событие','20180915' UNION ALL SELECT 3,'Последние событие','20180917' ), ORDERED AS ( SELECT C.ID,C.EVENTT,C.EVENTDATE, ROW_NUMBER()OVER(PARTITION BY C.ID ORDER BY C.EVENTDATE DESC)AS XCOL FROM CTE AS C ) SELECT R.ID,R.EVENTT,R.EVENTDATE FROM ORDERED AS R WHERE R.XCOL=2; |
29 июл 19, 22:00 [21937274] Ответить | Цитировать Сообщить модератору |
Peretcz Member Откуда: Сообщений: 2 |
SERG1257, спасибо! С Row_number не был знаком, теперь буду знать. |
30 июл 19, 19:04 [21938195] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |