ホームページ  >  記事  >  データベース  >  MySQL でグループ化されたデータの最初と最後のレコードを効率的に取得するにはどうすればよいですか?

MySQL でグループ化されたデータの最初と最後のレコードを効率的に取得するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-08 20:26:02494ブラウズ

How to Efficiently Retrieve First and Last Records of Grouped Data in MySQL?

MySQL の集計関数を使用したグループ化されたデータの最初と最後のレコードの取得

MySQL では、集計関数を使用してグループ化されたレコードからデータを取得するときに、グループの最初と最後のレコードを取得するのは難しい場合があります。複数のクエリでこれを実現できますが、大きなテーブルの場合は非効率的になる可能性があります。

このプロセスを最適化するために、MySQL は GROUP_CONCAT 関数と SUBSTRING_INDEX 関数を使用したより効率的なソリューションを提供します。 .

GROUP_CONCAT と SUBSTRING_INDEX の使用

これらの関数を一緒に使用すると、グループの値を連結し、SUBSTRING_INDEX を使用して最初と最後の値を抽出できます。

SUBSTRING_INDEX(GROUP_CONCAT(CAST(open AS CHAR) ORDER BY datetime), ',', 1) AS open
SUBSTRING_INDEX(GROUP_CONCAT(CAST(close AS CHAR) ORDER BY datetime DESC), ',', 1) AS close

仕組み:

  • GROUP_CONCAT は、すべての開始値または終了値を 1 つの文字列に連結します。
  • SUBSTRING_INDEX は、連結された文字列をカンマ (',') で分割して最初と最後の値を抽出します。 '1' 引数は、最初または最後の出現を示します。

例:

次のクエリを考えてみましょう:

SELECT MIN(low_price), MAX(high_price),
SUBSTRING_INDEX(GROUP_CONCAT(CAST(open AS CHAR) ORDER BY datetime), ',', 1) AS open,
SUBSTRING_INDEX(GROUP_CONCAT(CAST(close AS CHAR) ORDER BY datetime DESC), ',', 1) AS close
FROM symbols
WHERE date BETWEEN(.. ..)
GROUP BY YEARWEEK(date)

Thisクエリは各グループの最初 (オープン) と最後の (クローズ) レコードを効率的に取得し、大きなテーブルの処理時間を最小限に抑えます。

以上がMySQL でグループ化されたデータの最初と最後のレコードを効率的に取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。