MySQL 集計関数を使用してグループ化されたデータから最初と最後のレコードを取得する
MySQL でグループ化されたデータを扱う場合、次のアクセスが必要になる場合があります。各グループ内の最初と最後のレコード。たとえば、次のクエリについて考えてみます。
SELECT MIN(low_price), MAX(high_price), open, close FROM symbols WHERE date BETWEEN(.. ..) GROUP BY YEARWEEK(date)
このクエリは、年間の各週の最低安値、最高高値、始値、終値を取得します。ただし、各グループの最初と最後のレコードを取得することが目的の場合、上記のクエリでは不十分です。
解決策
これを達成するには、 GROUP_CONCAT 関数と SUBSTRING_INDEX 関数。次のクエリは、最初と最後の始値の列を含めるように元のクエリを変更します。
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)
説明
これらの関数を使用すると、クエリは効率的に各グループの最初の始値と最後の終値。このアプローチにより、複数のサブクエリの必要性が回避され、必要なデータを取得するためのパフォーマンスの高いソリューションが提供されます。
以上がMySQL でグループ化されたデータから最初と最後のレコードを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。