MySQL のグループ化された結果から最初と最後のレコードを取得する
MySQL では、グループ化された結果セットの最初と最後のレコードを取得します。集計関数を適用するのは難しい場合があります。次のクエリについて考えてみましょう:
SELECT MIN(low_price), MAX(high_price), open, close FROM symbols WHERE date BETWEEN (.. ..) GROUP BY YEARWEEK(date)
このクエリはデータを週ごとにグループ化し、週ごとの最小安値、最大高値、始値、終値を計算します。ただし、各グループ内の最初と最後のレコードは提供されません。
これを実現するには、GROUP_CONCAT 関数と SUBSTRING_INDEX 関数を使用することが 1 つの方法です。
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
このソリューションでは、次のことが可能になります。各グループの開始値と終了値をすべてコンマで区切って連結し、SUBSTRING_INDEX を使用して最初と最後の値を抽出します。このアプローチにより、高価なサブクエリが回避され、この特定の問題に対してより効率的になります。
GROUP_CONCAT 関数と SUBSTRING_INDEX 関数の詳細については、MySQL ドキュメントを参照してください。さらに、クエリの特定の要件に応じて、ウィンドウ関数やユーザー定義関数の使用など、他のオプションを検討することもできます。
以上がMySQL でグループ化された結果から最初と最後のレコードを取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。