Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не получается написать запрос  [new]
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]     Ответить | Цитировать Сообщить модератору
 Re: Не получается написать запрос  [new]
SERG1257
Member

Откуда:
Сообщений: 2726
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]     Ответить | Цитировать Сообщить модератору
 Re: Не получается написать запрос  [new]
londinium
Member

Откуда: Киев
Сообщений: 1165
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]     Ответить | Цитировать Сообщить модератору
 Re: Не получается написать запрос  [new]
Peretcz
Member

Откуда:
Сообщений: 2
SERG1257, спасибо! С Row_number не был знаком, теперь буду знать.
30 июл 19, 19:04    [21938195]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить