このクエリはあいまいです:
SELECT ID, MAX( TIME )
FROM tbl_test
WHERE TIME <=1353143351
GROUP BY caseID
MAX(TIME) が発生する行の ID が返されるとは限らないため、あいまいです。の個別の値ごとに MAX(TIME) を返しますがcaseID
、他の列 (ID など) の値はグループのメンバーから任意に選択されます。
実際には、MySQL は、格納順に行をスキャンするときに、グループ内で最初に見つかった行を選択します。
例:
caseID ID time
1 10 15:00
1 12 18:00
1 14 13:00
最大時間は 18:00 で、これは ID 12 の行です。ただし、クエリは ID 10 を返します。これは、グループ内の最初の行であるためです。ORDER BY で順序を逆にすると、ID 14 が返されます。最大時間が見つかった行ではありませんが、行グループの反対側からのものです。
ORDER BY caseID DESC
偶然にも、ID の増加に伴って Time 値が増加するため、クエリが機能します。
この種のクエリは、実際には、標準 SQL および他のほとんどのブランドの SQL データベースではエラーになります。MySQL は、ユーザーが明確なクエリを作成する方法を知っていることを信頼して、それを許可します。
修正は、明確な場合にのみ選択リストの列を使用することです。つまり、列が GROUP BY 句にある場合、各グループは 1 つの異なる値のみを持つことが保証されます。
SELECT caseID, MAX( TIME )
FROM tbl_test
WHERE TIME <=1353143351
GROUP BY caseID