これは、人々の訪問を記録する記録シートです。
データテーブルのデータには、各人が訪問時にかぶっていた帽子の色、時刻、人物コード(各人固有)が正確に記録されています。
条件を満たしている訪問記録。
あなたなら何をするのが最善ですか?
最初に実装するのは、個人コード A101 の最新の訪問記録を取得することです。
最初に間違った SQL の例を示します。max() 関数を当然のことと考えています。
SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record WHERE user_code='A101' ;
クエリ結果 (間違った結果) :
データは一見すると正しいように見えますが、実際には間違っています。
なぜそれが間違っているのでしょうか? コメント エリアに興味を持っている人もいるので、少し教えてください (兄弟も意見を表明することは歓迎です)。
簡単に説明すると、max は集計関数です。このエラー例は group by では使用されていません。実際、現時点でこれを実行できるのは mysql だけであり、多くのデータベースはエラーを直接報告します。
その後、実行が実行されますが、実際、この時点で MySQL はテーブル全体をコンテンツ ブロックとして扱い、圧縮された検索を実行するのと同じことになります。
where 条件 user_code='A101' を追加したため、コンテンツ ブロック全体で user_code='A101' ではない他のデータが除外されます。
つまり、この種の緩い実行では、mysql は max が最大値 (関連する列) を返すことを保証しますが、他の列フィールドについては保証されません。
正しいデータは次のとおりです:
max(id) は使用できませんか?
正しい使用方法 (条件を満たす最大の ID 値を条件として使用します):
SELECT
id,user_code,cap_color,create_time
FROM vist_record
WHERE id IN (SELECT MAX(id) AS id FROM vist_record WHERE user_code='A101' )
クエリ結果:
しかし、私は上記の使用法を見た このサブクエリの方法では、
誰もが密かに悪口を言っていたはずですが、最新のデータを取得するのはそれほど面倒ですか?
もっと簡単なものはありますか? ######持っている。
たとえば、idは自動インクリメントされており、idが最も大きいデータ(条件を満たしたデータ)が最新であると判断しています。
次に、逆順 DESC を使用して最新のデータを取得できます。
DESC は逆順/降順です。
追記:
逆検索を使用:
FROM vist_recordWHERE user_code='A101'
クエリ結果:
ORDER BY ID DESC
LIMIT 1;
または時間に応じて逆順:
SELECT *
FROM vist_recordWHERE user_code='A101'
クエリ結果:
ORDER BY create_time DESC
LIMIT 1;
達成するのはそんなに簡単ですか?
では、必要なのは A101 を指定することではなく、関係者全員の最新データである場合はどうなるでしょうか?
つまり、複数の概念グループが存在します。
各カテゴリの条件を満たす最新データ
エラー例:
間違ったフィルター結果:
正しいエンコード:
SELECT id ,user_code,cap_color,create_time FROM vist_record WHERE id in
#
(
SELECT MAX(id) AS id FROM vist_record GROUP BY user_code
)
以上がMySqlで条件を満たす最新のデータ行を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。