ホームページ > データベース > mysql チュートリアル > データベーステーブル内の各キーの最新の値を効率的に選択するにはどうすればよいですか?

データベーステーブル内の各キーの最新の値を効率的に選択するにはどうすればよいですか?

DDD
リリース: 2024-12-31 20:25:19
オリジナル
1014 人が閲覧しました

How to Efficiently Select the Most Recent Values for Each Key in a Database Table?

データベース テーブル内の各キーの最新の値の選択

センサー データやその他のタイムスタンプ付き情報を含むテーブルを操作する場合、多くの場合、個々のキー値の最新のエントリを取得する必要があります。キーによるグループ化と最大タイムスタンプによる順序付けを含む単純なアプローチは直感的に見えるかもしれませんが、集計に非キー フィールドが含まれるためにエラーが発生する可能性があります。

サブクエリを使用した代替ソリューション:

信頼できる 1 つの方法は、サブクエリを使用して各キーの最大タイムスタンプを識別することでこの問題に対処します。値:

SELECT sensorID,
       timestamp,
       sensorField1,
       sensorField2
FROM sensorTable
WHERE timestamp = (SELECT MAX(timestamp) FROM sensorTable WHERE sensorID = sensorTable.sensorID)
ORDER BY sensorID, timestamp;
ログイン後にコピー

このクエリ内:

  • プライマリ テーブル sensorTable は 2 回アクセスされます。
  • 内部サブクエリは最大タイムスタンプ (MAX(timestamp) を取得します) ) 各センサー ID を調べ、プライマリからの対応するタイムスタンプと比較します。テーブル。
  • キー値ごとに最新のタイムスタンプを持つ行が選択されます。
  • 取得される列には、センサー ID、タイムスタンプ、センサーフィールド 1、およびセンサーフィールド 2 が含まれます。

を使用した追加の解決策JOIN:

代替ソリューションでは JOIN 操作を利用します:

SELECT
    s1.sensorID,
    s1.timestamp,
    s1.sensorField1,
    s1.sensorField2
FROM sensorTable AS s1
JOIN (
    SELECT sensorID, MAX(timestamp) AS max_timestamp
    FROM sensorTable
    GROUP BY sensorID
) AS s2
    ON s1.sensorID = s2.sensorID AND s1.timestamp = s2.max_timestamp;
ログイン後にコピー
  • このクエリは、各センサー ID の最大タイムスタンプを含む一時テーブル (s2) を作成します。
  • s1 (メインテーブル) は、sensorID および timestamp 列で s2 と結合され、最新のものを選択します。各キー値の行。

以上がデータベーステーブル内の各キーの最新の値を効率的に選択するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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