簡體   English   中英

SQL:如何選擇每天的最大記錄?

[英]SQL: How to select a max record each day?

在此處輸入圖片說明

我發現了很多類似的問題,但沒有一個完全適合我的情況,我正在努力尋找解決方案幾個小時。 我的表由字段 DAY、HOUR、EVENT1、EVENT2、EVENT3 組成。 因此我每天有 24 行。 EVENT1、EVENT2、EVENT3 有一些值,我想每天只選擇 EVENT3 在當天(24 小時內)具有最大值的行(我的意思是記錄)。 最終結果將是每天一行

源表

一種方法使用相關子查詢:

select t.*
from t
where t.event3 = (select max(t2.event3)
                  from t t2
                  where t2.date = t.date
                 );

在大多數數據庫中,這在(date, event3)上有索引時具有非常好的性能。

更規范的解決方案使用row_number()

select t.*
from (select t.*,
             row_number() over (partition by date order by event3 desc) as seqnum
      from t
     ) t
where seqnum = 1;

除了使用相關子查詢之外,另一種選擇是編寫這是一個左自連接,如下所示:

SELECT t.*
FROM t
LEFT JOIN t AS t2 ON t.day = t2.day AND t2.event3 > t.event3
WHERE t2.id IS NULL

如果您想在具有相同最大 event3 的多行的情況下每天選擇任意匹配的行, GROUP BY t.day在其末尾添加GROUP BY t.day

我不確定這與 Gordon Linoff 的解決方案的性能相比如何,但無論如何它們可能會被 RDBMS 組合成非常相似的查詢計划。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM