2017-02-15 4 views
0

У меня есть таблица доступа вида:SQL: Группировка дело с условием

ID  Country  Application Date 
-------------------------------- 
12  France  12/01/2016 
12  Germany  01/01/2017 
13  Germany  01/02/2017 
14  Spain   23/01/2017 
14  Germany  01/02/2017 
15  
16  Greece  01/01/2017 

Я хотел бы получить один вхождение каждого идентификатора с самой последней даты подачи заявки.

Я попытался это:

SELECT ID, Country, Max(Application Date) 
FROM MyTable 
GROUP BY ID 

Но доступ отказал этот запрос и хотел, чтобы добавить страну в группе по статье, которая не может работать тогда. Кроме того, я хотел бы иметь возможность получать строки без даты страны и приложения (например, строка с ID = 15).

Ожидаемый результат будет:

ID  Country  Application Date 
-------------------------------- 
12  Germany  01/01/2017 
13  Germany  01/02/2017 
14  Germany  01/02/2017 
15  
16  Greece  01/01/2017 
+0

С этими данными образца, каков ожидаемый результат? – jarlh

+0

Общее правило GROUP BY гласит: «Если указано предложение GROUP BY, каждая ссылка столбца в списке SELECT должна либо идентифицировать столбец группировки, либо быть аргументом функции набора». – jarlh

ответ

3

Я думаю, что это то, что вы можете

select t1.* from MyTable as t1 inner join 
(
SELECT ID, Max(Application Date) as Application Date 
FROM MyTable 
GROUP BY ID 
) as t2 on t1.Id=t2.ID and t1.Application Date=t2.Application Date 
+0

Большое вам спасибо, это очень помогает! Я понял, что количество строк моей таблицы было неправильным и только что заметили, что есть некоторые дублирующие данные: (То же имя, одна и та же страна, одна и та же дата применения). Спасибо за помощь! –

0

Он работает на входных данных и возвращает правильный выходных данных. Попробуйте, пожалуйста)

SELECT d.id, MyTable.country, d.datemax 
FROM (SELECT ID as id, Max(AppDate) as datemax 
FROM MyTable 
GROUP BY ID) as d 
,MyTable 
WHERE d.id = MyTable.id and datemax = MyTable.appdate 
OR (datemax is null and country is null) 
Смежные вопросы