在MySQL 中從分組聚合查詢中取得第一條和最後一筆記錄
在資料庫操作中,經常不僅需要檢索聚合值,還需要檢索聚合值有關分組集中第一個和最後一個記錄的特定資訊。考慮這樣一個場景:我們正在獲取按特定時間段(例如周或年)分組的一組值的聚合數據,並且我們希望檢索每個組的開盤值和收盤值。
要實現為此,我們最初可能會考慮使用子查詢為每個群組發出多個單獨的查詢。然而,這種方法並不是最理想的,尤其是對於大型資料集。 MySQL 使用聚合函數結合附加過濾和資料操作函數為此類場景提供了有效的解決方案。
要取得每個群組的第一條和最後一筆記錄,我們可以利用 GROUP_CONCAT 和 SUBSTRING_INDEX 函數。 GROUP_CONCAT 允許我們連接每個群組中指定列的值,SUBSTRING_INDEX 允許我們根據分隔符號提取第一個或最後一個子字串。
例如,要檢索每年每週的開始和結束值,我們將查詢修改如下:
此查詢按每年的周對資料進行分組,併計算最小low_price 和最大high_price。此外,它使用 GROUP_CONCAT 連接每個群組的所有開放值,按日期時間升序排序,並使用 SUBSTRING_INDEX 提取第一筆記錄作為開放值。同樣,它按降序連接所有收盤值,並提取最後一筆記錄作為每個群組的收盤值。
透過利用這些函數,我們避免了子查詢和昂貴的處理的需要,從而更快、更有效率查詢,尤其是在處理大型資料集時。
以上是如何從 MySQL 中的分組聚合查詢中取得第一筆和最後一筆記錄?的詳細內容。更多資訊請關注PHP中文網其他相關文章!