2014-03-24 174 views

回答

0

我建議在子查詢窗口函數ntile()

SELECT * 
FROM (
    SELECT *, ntile(50) OVER (ORDER BY ts) AS part 
    FROM tbl 
    WHERE ts >= $start 
    AND ts < $end 
    ) sub 
WHERE part NOT IN (1, 50); 

ts是您的date列。

ntile()將整數分配給劃分爲指定分區數的行。 Per documentation:

整數從1到參數值,將所述分區儘可能均等

通過使用50個分區,第一分區作爲緊密匹配所述第一2%爲可能的且在最後的最後2%(> 98%)。

注意,如果少於50行,分配的數字永遠不會達到50.在這種情況下,第一行將被裁剪,但不是最後一行。由於第一個和最後一個2%沒有很好地定義這麼少的行數,這可能被認爲是正確的或不正確的。檢查總行數並適應您的需求。例如通過修剪最後一行也是如此。或者根本沒有。

+0

說實話,我完全不理解你的查詢。我想阻止查詢中的值小於2%和大於98%的累積值。例如,我知道GIS中用於設置可視化柵格數據的最小值和最大值。你能給個例子嗎? – Stefan

+0

@StefanB .:我*做了一個例子。並解釋。現在用您的數據嘗試查詢。如果您需要測試用例,那麼您的工作就是提供測試用例。 –