ホームページ > データベース > mysql チュートリアル > MySqlサンプル詳細解説:条件を満たす最新のデータ行を見つける方法

MySqlサンプル詳細解説:条件を満たす最新のデータ行を見つける方法

WBOY
リリース: 2022-07-08 14:59:49
転載
2044 人が閲覧しました

この記事では、mysql に関する関連知識を提供し、主に条件を満たす最新のデータ行を見つける方法に関する関連事項を整理します。最新の概念ですが、製品の場合は時系列順とよく言われますが、最新というのは最新という意味ですので、一緒に見ていきましょう。

MySqlサンプル詳細解説:条件を満たす最新のデータ行を見つける方法

推奨学習: mysql ビデオ チュートリアル

ビジネスを行う際には、最新のデータを確認する必要があることがよくあります。

最新という概念ですが、製品に関しては時系列の話がよくありますが、最新とは最新という意味です。

組み合わせ例:

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

データ サンプル:

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

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

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

まず実装してみましょう。個人コード 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 は逆順/降順です。

PS:


逆検索を使用します:

SELECT *
FROM vist_record

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

クエリ結果:

または時間の逆順:

SELECT *
FROM vist_record

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

クエリ結果:

達成するのはそんなに簡単ですか?

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

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

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

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

エラー例:

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

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

正しいエンコード:

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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート