2017-06-14 3 views
-6

私は以前の質問でこのSQLを答えとして得ましたが、質問を説明するのに何の応答も得られませんでした。だから私はここで尋ねる。 私の前の質問:How can i remove the oldest entries in my SQL result?誰かが私にこのSQLを説明することはできますか?

select a.id, 
     a.user, 
     a.item_id, 
     a.created 
    from reports as a 
where a.created = (select max(created) 
         from reports as b 
        where a.item_id = b.item_id) 
+3

あなたは何を理解していますか? –

+1

文脈があるので、少なくとも他の質問にリンクしてください! –

+0

私はそれを説明したい - パートごとに、完全なクエリを理解するために –

答えて

0

あなたはテーブルがreportsと呼ばれる持っていて、iduseritem_id、およびcreatedフィールドから構成表を抽出しています。この新しいテーブルには、それぞれitem_idの個別の最大値がcreatedの行のみが含まれます。テーブルと呼ばれるレポートから

select a.id, 
     a.user, 
     a.item_id, 
     a.created 

(A):

where a.created = (select max(created) 
         from reports as b 
        where a.item_id = b.item_id) 
+0

条件についても説明できますか? –

+1

'3'、 '1'、 '19333'、 '2017-06-13 19:26:56' '4'、 '1'、 '19333'、 '2017-06-13 19:29:24'あなたは同じitem_idを持っていますよね?しかし、2つの異なるタイムスタンプがありますので、最新のものを選択してください。max(created) – MiloBellano

+2

上記の@ MiloBellanoの例では、同じitem_idを持つ2つの行があるため、作成されたフィールドの最大値(最新の日付) – user2309843

1

from reports as a 

のみ条件を満たす行を抽出

この部分は、あなたがしたいフィールドを抽出します

次のサブクエリは、返された最大の結果を返します(私はそれが最後の作成日が返されるように日付の列だと思います)

select max(created) 
        from reports as b 
       where a.item_id = b.item_id 

レポートテーブルの作成列の結果がその値と一致し、結果が返されます。 次の行は、両方の表のitem_id列と一致しています。

where a.item_id = b.item_id 
+1

サブクエリは、グローバルmaxとは異なり、item_idごとにmax created resultを返します。 – user2309843

関連する問題