2016-05-13 17 views
1

私は最新の出荷を見ることができるSQLクエリを作りたいと思います。現在、私は次の結果を得ています。最新のデータのみを取得するためのSQLクエリ

item date  licence plate number 
1  13.5.2016 abc-123 
2  13.5.2016 abc-123 
3  10.5.2016 xyz-567 
1  20.4.2016 abc-123 
2  20.4.2016 abc-123 
6  10.5.2016 xyz-567 

ただし、ナンバープレートの番号に基づいて最新の出荷を取得したいと思います。希望の出力は

item date  licence plate number 
1  13.5.2016 abc-123 
2  13.5.2016 abc-123 
3  10.5.2016 xyz-567 
+1

どのdbmsを使用していますか? –

+0

"最新"を定義すると、お手伝いできます。アイテム3は含まれていますが、アイテム6は除外されていますか? – Andreas

+0

どのDBMSを使用していますか? –

答えて

3

ようになります。次のクエリを使用することができます

SELECT t1.* 
FROM mytable AS t1 
JOIN (
    SELECT item, MAX("date") AS "date" 
    FROM mytable 
    GROUP BY item 
) AS t2 ON t1.item = t2.item AND t1."date" = t2."date" 

をクエリがitemごとに最新の日付を選択し、派生テーブルを使用しています。この派生テーブルを使用して、この日付に対応するレコードを選択することができます。

0

多分これは役立ちます:

SELECT TOP 10 --change 10 to any desired number to be viewed 
* 
FROM YourDatabaseName 
ORDER BY Date DESC 
+0

OPが求めているものではありません。 (dbmsタグが付いていない質問に対する製品固有の回答) – jarlh

0

あなたが最初のテーブルを結合し、各プレートの番号の私たちの最大の日付を見つける必要があります。

以下のクエリを使用できます。

select t2."item",t1."date",t1."licence plate number" from (
(select max("date") as date, "licence plate number" from Table_1 group by 
"licence plate number")) t1 
left join Table_1 t2 
on (t1."date" = t2."date" and t1."licence plate number" = t2."licence plate number") 

このクエリの出力は次のようになります。

1  2016-05-13  abc-123 
2  2016-05-13  abc-123 
3  2016-05-10  xyz-567 
6  2016-05-10  xyz-567 
+0

区切られた識別子の角括弧は製品固有であり、質問にはタグが付けられていないことに注意してください。 ANSI SQLには二重引用符があります。 '' item "' (MS SQL Serverは実際に両方のバージョンをサポートしています。) – jarlh

+0

おかげで.. @jarlh –

1

次DBMSの広い範囲でサポートされている標準のSQLされています。窓関数を使用して

select item, date, licence_plate_number 
from (
    select item, date, licence_plate_number, 
      row_number() over (partition by licence_plate_number order by date desc as rn) 
    from the_table 
) t 
where rn = 1 
order by item; 

は通常より早く骨材と結合する自己を超えています。

関連する問題