0
我有一個名爲「level」的列的數據庫,它存儲從1開始增加的整數。在SQL中設置範圍邊界
我想運行一個select語句(它也會有各種其他條件)來檢索每個「級別」的第一個和最後一個行,即每個級別的邊界。但是我有數千萬條記錄,所以希望以最有效的方式做到這一點。
有什麼建議嗎?
我有一個名爲「level」的列的數據庫,它存儲從1開始增加的整數。在SQL中設置範圍邊界
我想運行一個select語句(它也會有各種其他條件)來檢索每個「級別」的第一個和最後一個行,即每個級別的邊界。但是我有數千萬條記錄,所以希望以最有效的方式做到這一點。
有什麼建議嗎?
我會調用決定第一個和最後一個something
的變量。我想這是一個時間戳,但你沒有告訴我們。
如果從該行需要一列,然後
SELECT level, MAX(something) as maxie, MIN(something) as minnie
FROM mytable
GROUP BY level;
如果你想整行,請務必使用一個數據庫窗口函數
SELECT DISTINCT first_value(mytable) over www, last_value(mytable) over www
FROM mytable
WINDOW www as (partition by level order by level, something
RANGE BETWEEN unbounded preceding AND unbounded following);
如果這些都太緩慢,有可能基於level
和something
的巧妙索引的一些噱頭。我仍然在學習窗口化,這對Postgres 9來說是新的,但在Oracle中已經有好幾年了。 (這不是在MySQL中;你可能需要獲得極值的PK並進行連接。)
如何確定每個級別的哪些行是「第一」和「最後」? – 2011-04-25 02:23:12
這個問題在SO中多次提出 - 你應該首先進行搜索。通常,您需要指定如何確定順序(即第一個和最後一個)以及如何處理重複項。 – 2011-04-25 05:34:26