2017-06-19 16 views
0

質問があります:MySQLの特定の行のセットから最新の日付を取得します。MySQLの行選択の日付

たとえば、ID、クライアントID、および購入日を持つPurchasingテーブルがあるとします。

enter image description here

私はクライアントID = 1に基づいた選択をした場合、私はあなたが後にしている何のid = 2

+0

更新あなたは....疑問と期待される結果を追加したデータではない言葉 – scaisEdge

+0

SELECT ID、 'クライアントid'、MAX(' purchase'日) としてテーブルFROM 'クライアントid' = 1 GROUP BY 'クライアントID'; – JYoThI

答えて

0

の購入をこれはキャプチャする必要がありますか?その後、

また
SELECT Id, `client id`, MAX(`date of purchase`) 
FROM your_db 
GROUP BY `client id` 

あなただけの1行を返すようにしたい場合は

SELECT Id, `client id`, MAX(`date of purchase`) 
FROM your_db 
WHERE `client id` = 1 
+1

Id列は集計ではありません。このクエリは、他のデータベースやstrictモードで動作しているMySQLで実行されることはありません。 –

+0

そうです。実際、プロシージャを介してクライアントIDを選択できるようにしたかったのです。つまり、私の「GROUP BY client_id」は「どこのclient_id = id」になりますか?しかし、これは私に多くの答えを手伝った!タンク –

+0

@TimBiegeleisenはこの例では正しいですが、実際にはそこに存在する必要はありません。厳密なmysqlの場合、Timの答えがうまくいくでしょう。異なるデータベースの場合、DBに依存する質問は、猫をスキンケアする多くの方法があるためです – Tik

0
SELECT id, client_id, DATE_OF_PURCHASE 
FROM purchasing 
GROUP BY DATE_OF_PURCHASE 
HAVING MAX(DATE_OF_PURCHASE) 

は、コードの上お試しください。

希望すると、これが役立ちます。

0

あなたが行全体をしたい場合、あなたはいくつかの方法でこれを行うことができますが、むしろ「集約」よりも「フィルタリング」を考える:もちろん

select t.* 
from t 
where (client_id, date_of_purchase) in (select client_id, max(date_of_purchase) 
             from t 
             group by client_id 
             ); 

を、同様のロジックを表現する多くの方法があります。 。 。相関照会を使用してexistsまたはjoinの相関サブクエリを使用して=を使用します。

1

これを実行する1つの方法は、各クライアントの最新の購入日を検出するサブクエリに参加することです。

SELECT t1.* 
FROM yourTable t1 
INNER JOIN 
(
    SELECT client_id, MAX(purchase_date) AS max_purchase_date 
    FROM yourTable 
    GROUP BY client_id 
) t2 
    ON t1.client_id  = t2.client_id AND 
     t1.purchase_date = t2.max_purchase_date 
-- WHERE client_id = 1