ホームページ  >  記事  >  データベース  >  MySqlで条件を満たす最新のデータ行を見つける方法

MySqlで条件を満たす最新のデータ行を見つける方法

PHPz
PHPz転載
2023-05-27 11:31:121631ブラウズ

MySqlで条件を満たす最新のデータ行を見つける方法

結合例:

これは、人々の訪問を記録する記録シートです。
データテーブルのデータには、各人が訪問時にかぶっていた帽子の色、時刻、人物コード(各人固有)が正確に記録されています。
MySqlで条件を満たす最新のデータ行を見つける方法

データ サンプル:

MySqlで条件を満たす最新のデータ行を見つける方法

行う必要があるのは次のとおりです:

条件を満たしている訪問記録。

あなたなら何をするのが最善ですか?

最初に実装するのは、個人コード A101 の最新の訪問記録を取得することです。

最初に間違った SQL の例を示します。max() 関数を当然のことと考えています。


SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record WHERE user_code='A101' ;

クエリ結果 (間違った結果) :

MySqlで条件を満たす最新のデータ行を見つける方法

データは一見すると正しいように見えますが、実際には間違っています。

なぜそれが間違っているのでしょうか? コメント エリアに興味を持っている人もいるので、少し教えてください (兄弟も意見を表明することは歓迎です)。

簡単に説明すると、max は集計関数です。このエラー例は group by では使用されていません。実際、現時点でこれを実行できるのは mysql だけであり、多くのデータベースはエラーを直接報告します。

その後、実行が実行されますが、実際、この時点で MySQL はテーブル全体をコンテンツ ブロックとして扱い、圧縮された検索を実行するのと同じことになります。

where 条件 user_code='A101' を追加したため、コンテンツ ブロック全体で user_code='A101' ではない他のデータが除外されます。

つまり、この種の緩い実行では、mysql は max が最大値 (関連する列) を返すことを保証しますが、他の列フィールドについては保証されません。

正しいデータは次のとおりです:

MySqlで条件を満たす最新のデータ行を見つける方法

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' )

クエリ結果:
MySqlで条件を満たす最新のデータ行を見つける方法

しかし、私は上記の使用法を見た このサブクエリの方法では、

誰もが密かに悪口を言っていたはずですが、最新のデータを取得するのはそれほど面倒ですか?

もっと簡単なものはありますか? ######持っている。

たとえば、idは自動インクリメントされており、idが最も大きいデータ(条件を満たしたデータ)が最新であると判断しています。

次に、逆順 DESC を使用して最新のデータを取得できます。

DESC は逆順/降順です。

追記:


MySqlで条件を満たす最新のデータ行を見つける方法逆検索を使用:

SELECT *
FROM vist_record

WHERE user_code='A101'
ORDER BY ID DESC
LIMIT 1;

クエリ結果:

MySqlで条件を満たす最新のデータ行を見つける方法または時間に応じて逆順:

SELECT *
FROM vist_record

WHERE user_code='A101'
ORDER BY create_time DESC
LIMIT 1;

クエリ結果:

MySqlで条件を満たす最新のデータ行を見つける方法達成するのはそんなに簡単ですか?

では、必要なのは A101 を指定することではなく、関係者全員の最新データである場合はどうなるでしょうか?

つまり、複数の概念グループが存在します。

各カテゴリの条件を満たす最新データ

オレンジ色の枠が取り出したいA101、B202、C303の最新レコードです。

MySqlで条件を満たす最新のデータ行を見つける方法エラー例:


SELECT MAX(id) AS id ,user_code,cap_color,create_time FROM vist_record GROUP BY user_code

間違ったフィルター結果:

MySqlで条件を満たす最新のデータ行を見つける方法正しいエンコード:

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で条件を満たす最新のデータ行を見つける方法

#

以上がMySqlで条件を満たす最新のデータ行を見つける方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。