SQL Запрос к серверу, показывающий последние отдельные данные - PullRequest
0 голосов
/ 04 мая 2020

Я пытаюсь создать запрос SQL для восстановления только самой молодой записи таблицы (в ней уже есть столбец метки времени), где элемент, по которому я хочу фильтровать, появляется несколько раз, как показано в моем примере таблицы :

table example.

В основном у меня есть table1 с Id, Millis, fkName и Price и table2 с Id и Name.

В table1 элементы могут появляться несколько раз при то же самое fkName.

Мне нужно создать один запрос, в котором я могу перечислить последнюю запись для каждого fkName, чтобы получить наиболее актуальную цену для каждого элемента.

То, что я пробовал до сих пор, - это запрос с

SELECT DISTINCT [table1].[Millis], [table2].[Name], [table1].[Price]
FROM [table1]
JOIN [table2] ON [table2].[Id] = [table1].[fkName]
ORDER BY [table2].[Name]

Но я не могу получить правильный список.

Любой совет по этому поводу? Заранее спасибо,

Ответы [ 2 ]

2 голосов
/ 04 мая 2020

Простой и переносимый подход к этой задаче с наибольшим числом групп - отфильтровать с помощью подзапроса:

select t1.millis, t2.name, t1.price
from table1 t1
inner join table2 t2 on t2.id = t1.fkName
where t1.millis = (select max(t11.millis) from table1 t11 where t11.fkName = t1.fkName)
order by t1.millis desc
1 голос
/ 04 мая 2020

с использованием общего выражения таблицы:

;with [LastPrice] as (
    select [Millis], [Price], ROW_NUMBER() over (Partition by [fkName] order by [Millis] desc) rn
    from [table1] 
)
SELECT DISTINCT [LastPrice].[Millis],[table2].[Name],[LastPrice].[Price]
FROM [LastPrice]
JOIN [table2] ON [table2].[Id] = [LastPrice].[fkName]
WHERE [LastPrice].rn = 1
ORDER BY [table2].[Name]
...