在MySQL 中使用聚合函數從分組行中檢索第一條和最後一條記錄
在SQL 中,聚合函數可以高效地匯總跨組的數據。然而,當遇到分組記錄時,使用者在檢索每組的第一筆和最後一筆記錄時可能會遇到挑戰。在處理大型表時,這變得特別相關。
考慮以下查詢:
SELECT MIN(low_price), MAX(high_price), open, close FROM symbols WHERE date BETWEEN(.. ..) GROUP BY YEARWEEK(date)
雖然此查詢提供每個組的聚合統計資訊(例如最低和最高價格),但它確實不提供每週的第一個和最後一個記錄。為了滿足這項需求,MySQL 提供了多種方法。
使用 GROUP_CONCAT 和 SUBSTRING_INDEX
一種有效的技術涉及利用 GROUP_CONCAT 和 SUBSTRING_INDEX 函數。 GROUP_CONCAT 連線組內的指定值,並以分隔符號分隔。 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 和 SUBSTRING_INDEX 函數的進一步了解,請參閱官方 MySQL 文件。
以上是如何在 MySQL 中使用聚合函數從分組行中檢索第一條和最後一筆記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!