2016-08-24 1 views
0

У меня есть следующее ниже. У меня есть три записи в DriverID «134». Мне нужны последние последние данные. Как мне это сделать? Помогите мне, как получить последние последние данные AND вы можете помочь мне, как fatch данные из моей таблицы сортировки каждый второй последней записи более одного driverid enter image description hereкак получить вторую последнюю запись от driverid Sql server

ответ

2

используйте функцию Row_Number() Window

With cte as 
(
select *,Row_Number()over(order by Transdate desc) as Rn from yourtable 
Where DriverID = 134 
) 
Select * 
from cte 
Where Rn = 2 

для обработки, когда есть только одна запись для давать DriverID затем использовать

With cte as 
(
select *,Row_Number()over(order by Transdate desc) as Rn, 
count(1)over() as cnt from yourtable 
Where DriverID = 134 
) 
Select * 
from cte 
Where (Rn = 2 and cnt > 1) or (Rn = 1 and cnt = 1) 

Примечание: Если есть галстук в последней секунде записи, и вы хотите, как записи, а затем использовать DENSE_RANK вместо ROW_NUMBER

Update:

Чтобы найти вторую последнюю запись для всеDriverID's добавить раздел от Row_number и удалить DriverID из Where пункт

With cte as 
(
select *,Row_Number()over(Partition by DriverID order by Transdate desc) as Rn, 
count(1)over(Partition by DriverID) as cnt from yourtable 
) 
Select * 
from cte 
Where (Rn = 2 and cnt > 1) or (Rn = 1 and cnt = 1) 
+0

Вы были быстрее, чем у меня ... +1 Но вы можете использовать <= 2, чтобы поймать случаи, когда есть только одна запись ... (зависит от реальных потребностей, конечно) , – Shnugo

+0

@ Шнуго - Да, вы правы. Обновил ответ соответственно. Мы не можем использовать <= 2, потому что он вытащит две записи, если у вас есть более одной записи для заданного «DriverID» –

+0

. Можете ли вы, пожалуйста, помочь мне, как сопоставлять данные из таблицы сортировки каждой второй последней записи больше, чем один драйвер? –

0
SELECT * FROM (
    SELECT 
ROW_NUMBER() OVER (ORDER BY key DEC) AS rownumber, 
columns 
FROM tablename 
) AS foo 
WHERE rownumber <= 2