首頁 > 資料庫 > mysql教程 > 如何使用 SQL 的'GROUP BY”和'MAX”(或替代方案)檢索最新資訊?

如何使用 SQL 的'GROUP BY”和'MAX”(或替代方案)檢索最新資訊?

Barbara Streisand
發布: 2024-12-26 02:38:11
原創
387 人瀏覽過

How to Retrieve the Latest Information Using SQL's `GROUP BY` and `MAX` (or Alternatives)?

使用SQL Group By & Max 擷取最新資訊

在某些場景下,需要擷取分組的最新值或最大值按資料集中的特定列。其中一個常見的聚合是尋找唯一值組合的最新資訊。

考慮下表包含警報清單:

id name alarmId alarmUnit alarmLevel
1 test voltage psu warning
2 test voltage psu ceasing
3 test voltage psu warning
4 test temp rcc warning
5 test temp rcc ceasing

目標是僅檢索最新的AlarmId 和 AlarmUnit 的每個組合的資訊。預期結果應如下所示:

id name alarmId alarmUnit alarmLevel
3 test voltage psu warning
5 test temp rcc ceasing

可以使用多種方法來實現此結果。一種常見的方法涉及使用 ROW_NUMBER() 函數,該函數為每個組中的每一行分配一個排名。以下查詢利用此函數:

SELECT *
FROM (
    SELECT *, ROW_NUMBER() OVER (PARTITION BY alarmId, alarmUnit ORDER BY id DESC) AS rn
    FROM mytable
) q
WHERE rn = 1
登入後複製

此查詢傳回alarmId 和alarmUnit 的每個組合的最新行。

適用於不支援ROW_NUMBER() 函數的資料庫,例如MySQL,可以採用不同的方法:

SELECT mi.*
FROM (
    SELECT alarmId, alarmUnit, MAX(id) AS mid
    FROM mytable
    GROUP BY alarmId, alarmUnit
) mo
JOIN mytable mi
ON mi.id = mo.mid
登入後複製

此查詢利用子查詢來識別每個組合的最大id AlarmId 和AlarmUnit,然後將結果與原始表連接以檢索對應的行。

在PostgreSQL 8.3 及以下版本中,可以使用DISTINCT ON 子句:

SELECT DISTINCT ON (alarmId, alarmUnit) *
FROM mytable
ORDER BY alarmId, alarmUnit, id DESC
登入後複製

此查詢傳回alarmId 和alarmUnit 的每個組合的第一個不同行,這有效地提供了最新資訊。透過利用這些技術,開發人員可以有效地從資料中檢索最新值,使他們能夠根據最新的可用資訊做出明智的決策。

以上是如何使用 SQL 的'GROUP BY”和'MAX”(或替代方案)檢索最新資訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板