2013-04-30 2 views
2

У меня возникла небольшая проблема с тем, как выполнить приведенный ниже запрос. Я хочу вернуть строку для каждого уникального идентификатора в таблице 1, даже если дата равна null, но если есть несколько строк с тем же идентификатором, я хочу вернуть идентификатор только с самой последней датой. Любая помощь будет оцененаВыберите запрос, в котором строки с одинаковыми идентификаторами возвращают только строку с самым последним полем даты

Select a.ID, a.[zip code], b.date 
      from table1 a 

      left join table 2 b on a.ID = b.ID 
      Where a.[Zip Code] = '78701' 
Group by a.ID, a.[zip code], b.date 
      Order by a.[zip code] asc 

ответ

3

Вы можете использовать подзапрос для выбора только максимальную дату в table2 для каждого ID:

SELECT a.ID, a.[zip code], b.date 
FROM table1 a 
LEFT JOIN (SELECT ID, MAX(date) AS date 
      FROM table2 
      GROUP BY ID) b ON a.ID = b.ID 
WHERE a.[Zip Code] = '78701' 
ORDER BY a.[zip code] ASC 
+0

Thats great! В любом случае, чтобы получить это в группе вместо подзапроса? –

+0

Не уверен, что вы имеете в виду. Что вы надеетесь сгруппировать, точно? (Отображение ввода образца и желаемого результата в вопросе может помочь прояснить это.) –

+0

Просто поцарапайте этот вопрос;) Большое вам спасибо! –

2

Вы также можете иметь один и тот же результат, изменив запрос:

SELECT a.ID, a.[zip code], MAX(b.date) AS [date] 
FROM  table1 AS a  
       LEFT JOIN table2 AS b 
        ON a.ID = b.ID 
WHERE  a.[Zip Code] = '78701' 
GROUP BY a.ID, a.[zip code] 
ORDER BY a.[zip code] ASC ; 
Смежные вопросы