各グループの最新のレコードを取得する最も効率的な方法を見つけようとしています。MySQL - 各グループの最新レコードを表示する異なる結果
私は2つの異なるクエリを生成することができます。しかし、詳細は少し異なります。
これらは、gcm_notification
レコードです。 さらにレコードが存在します。しかし今はただ一つのレコードに集中したい。画像から、我々は今、私は2つの異なるクエリを使用して、各グループの最新のレコードを取得しようとしていますflag = 1
SELECT id, post_id, registration_id, flag
FROM gcm_notification
WHERE post_id = 1743
AND registration_id = "ezDCef_3ORo:APA91bG-sSjaMR9OwylrV7A0H7dvTEAfwJNYGUa3Ud5QZhNIh7-r2peLrb9H33pUs_KJkYisnsIUL4bUT1xrqffOv2jYXBB348oNgNVmLHGZrmgLFdWQiSVRfq9A8BhAGoBB0xN-aDs-"
とlatest id = 1393
を見ることができます。
オプション1:
SELECT MAX(id) as latest_id, post_id, flag
FROM gcm_notification
WHERE registration_id = "ezDCef_3ORo:APA91bG-sSjaMR9OwylrV7A0H7dvTEAfwJNYGUa3Ud5QZhNIh7-r2peLrb9H33pUs_KJkYisnsIUL4bUT1xrqffOv2jYXBB348oNgNVmLHGZrmgLFdWQiSVRfq9A8BhAGoBB0xN-aDs-"
GROUP BY post_id
オプション2:
SELECT id, post_id, flag
FROM gcm_notification t1
RIGHT JOIN (
SELECT MAX(id) AS latest
FROM wp_spc_gcm_notification
WHERE registration_id = "ezDCef_3ORo:APA91bG-sSjaMR9OwylrV7A0H7dvTEAfwJNYGUa3Ud5QZhNIh7-r2peLrb9H33pUs_KJkYisnsIUL4bUT1xrqffOv2jYXBB348oNgNVmLHGZrmgLFdWQiSVRfq9A8BhAGoBB0xN-aDs-"
GROUP BY post_id) t2
ON t1.id = t2.latest
WHERE registration_id = "ezDCef_3ORo:APA91bG-sSjaMR9OwylrV7A0H7dvTEAfwJNYGUa3Ud5QZhNIh7-r2peLrb9H33pUs_KJkYisnsIUL4bUT1xrqffOv2jYXBB348oNgNVmLHGZrmgLFdWQiSVRfq9A8BhAGoBB0xN-aDs-"
GROUP BY post_id
ご覧のとおり、オプション2は正しい結果を表示します。
これは私の質問は、
なぜオプション1ディスプレイ正しいid
しかしflag
値が間違っているのですか?それはMAX
が最新のid
を更新するだけで、フラグは更新しないからですか?
- 文を強調する方法がわからないので、SQLクエリがあまりにも面倒で読みにくい場合は申し訳ありません。 -
これは私が探している説明です! ありがとうございます。 – WeeHong