2017-02-15 2 views
0

と原因により、グループIはこのように見ているAccessのテーブルを持っている: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 

私は、最新の出願日と、各IDの単一発生を取得したいと思います。

私はこの試みた:

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

ありがとう、これは大いに役立ちます!私のテーブルの行の数が間違っていて、ちょうどいくつかの二重のデータがあることに気がついたことに気付きました:(同じId、同じ国、同じアプリケーションの日付)。ご協力ありがとうございました! –

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)