У меня есть следующее ниже. У меня есть три записи в DriverID «134». Мне нужны последние последние данные. Как мне это сделать? Помогите мне, как получить последние последние данные AND вы можете помочь мне, как fatch данные из моей таблицы сортировки каждый второй последней записи более одного driverid как получить вторую последнюю запись от driverid Sql server
0
A
ответ
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
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY key DEC) AS rownumber,
columns
FROM tablename
) AS foo
WHERE rownumber <= 2
Вы были быстрее, чем у меня ... +1 Но вы можете использовать <= 2, чтобы поймать случаи, когда есть только одна запись ... (зависит от реальных потребностей, конечно) , – Shnugo
@ Шнуго - Да, вы правы. Обновил ответ соответственно. Мы не можем использовать <= 2, потому что он вытащит две записи, если у вас есть более одной записи для заданного «DriverID» –
. Можете ли вы, пожалуйста, помочь мне, как сопоставлять данные из таблицы сортировки каждой второй последней записи больше, чем один драйвер? –