2016-08-15 4 views
0

У меня есть SQL Server таблицу со следующими данными:SQL - получить последние записи на основе даты последнего

enter image description here

Мне нужно получить последние записи для каждой валюты, так что результат должен быть:

enter image description here

можно ли получить этот результат только один выбор, не делая вложенными выбирает?

+0

Возможный дубликат [Получение последней записи в каждой группе] (http://stackoverflow.com/questions/1313120/retrieve-the-last-record-in-each-group) –

+0

* без выполнения вложенных выборок *: Почему ограничение? – sstan

+0

И еще один дубликат, специфичный для SQL Server с использованием функции Row_Number: http://stackoverflow.com/questions/4751913/retrieving-last-record-in-each-group-from-database-sql-server-2005-2008 –

ответ

0

Вы можете использовать функции окна

;with cteBase as (
    Select *,RowNr=Row_Number() over(Partition By Currency Order By Date Desc) from YourTable 
) 
Select * from cteBase Where RowNr=1 
+0

Просто любопытно при голосовании. Тем не менее, я дал UpVote для PALEL'S WITH TIES. Его было лучшим решением. –

1

Вы можете использовать ORDER BY с TIES следующим образом:

SELECT TOP 1 WITH TIES * 
FROM Src 
ORDER BY ROW_NUMBER() OVER (PARTITION BY Currency ORDER BY ID DESC) 
+0

Плюс1 со связями !!! Я всегда забываю об этом –

-1

так как ваши записи вошли в день обновления RATE (швы этак), это должно работать ... (пожалуйста, измените предел, чтобы соответствовать количеству валют в вашей таблице)

SELECT ID, DISTINCT (ВАЛЮТА), DATE, RATE FROM table ORDER BY CURRENCY, -DATE LIMIT 0,3

Смежные вопросы