2014-12-09 4 views
1

У меня есть запрос, который соединяется с несколькими таблицами. Основываясь на значении столбца одной таблицы, я хотел бы получить значение ключа другой таблицы. Но когда это ключевое значение присоединяется к другой таблице (с целью идентификации разных значений даты для этого ключа), появляется несколько дат. Я хотел бы вернуть значение ключа, дата которого является последней, когда она присоединена к другой таблице. У меня есть запрос, который работает, но он очень избыточный, так как подзапрос почти идентичен основному запросу. Я не знал, есть ли способ или лучший способ добиться этого.SQL - более чистый способ выбора результата на основе максимальной даты?

Пример запроса:

SELECT distinct TableA.key 
    FROM TableA a INNER JOIN TableB b 
     ON a.key = b.Key  
INNER JOIN TableC c ON b.Key2 = c.Key2 
INNER JOIN TableD d ON b.Key = d.Key 
WHERE b.column1 = XYZ   
AND c.column1 = 123 
and d.date = 

(SELECT max(d.date) 
    FROM TableA a INNER JOIN TableB b 
     ON a.Key = b.Key 
INNER JOIN TableC c ON b.Key2 = c.Key2 
INNER JOIN TableD d ON b.Key = d.Key 
WHERE b.column1 = XYZ   
AND c.column1 = 123 

) 

ответ

1

Попробуйте это. Использовать Top 1 with ties упорядочить по дате по убыванию

SELECT distinct TOP 1 with ties TableA.key 
    FROM TableA a INNER JOIN TableB b 
     ON a.key = b.Key  
INNER JOIN TableC c ON b.Key2 = c.Key2 
INNER JOIN TableD d ON b.Key = d.Key 
WHERE b.column1 = XYZ   
AND c.column1 = 123 
order by d.date desc 
+0

Я никогда раньше не видел опцию «top x with ties». Спасибо за информацию! – BateTech

+0

В этом ответе есть одна опечатка ... 'DISTINCT' должен появиться до' TOP 1 WITH TIES', а не после. – BateTech

+0

@BateTech - Спасибо за то, что указали это –

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