我在甲骨文12C類似表:如何查找按某個字段排序的每N行的最大值?
CREATE TABLE test (
id INT PRIMARY KEY,
foo VARCHAR2(20),
seconds int,
system_dt DATE
);
有了這樣
ABC, 10, 2016-01-01 00:00:01
ABC, 11, 2016-01-01 00:00:02
ABC, 5, 2016-01-01 00:35:54
ABC, 6, 2016-01-01 00:41:01
DEF, 15, 2016-01-01 00:00:02
DEF, 14, 2016-01-01 00:01:03
DEF, 51, 2016-01-01 00:36:55
DEF, 1, 2016-01-01 00:42:02
一組數據(需要注意的是id
,system_dt
(顯然rownum
)不要在增加是很重要的任何一致的值)
我想要做的是按foo, system_dt
對此表進行排序,然後在每N行中找到MAX(seconds)
由foo
承擔。
因此,在上面的例子中,其中N是2,輸出將是:
ABC, 11, 2015-01-01 00:00:02
ABC, 6, 2016-01-01 00:41:01
DEF, 15, 2016-01-01 00:00:02
DEF, 51, 2016-01-01 00:36:55
我想過使用ROWNUM,但ROWNUM增量是不是在下面的查詢是一致的:
SELECT foo, rownum, seconds, system_dt FROM test ORDER BY foo, system_dt ----- ABC, 3, 20 ABC, 134 25 ABC, 137, 18 ABC, 5086, 15 ABC, 5098, 16
什麼是所期望的結果,如果在輸入的行,對於給定FOO的數量,是不完全除盡的組大小?例如,如果您有20個值FOO ='ABC',並且您一次分爲六行? – mathguy
@mathguy我想這是不明確的,但我現在在內存中實現它的方式,我會採取在您的示例中的最後兩個值的最大值,而不是放棄它們。我想我並不擔心,因爲我正在將最糟糕的運行查詢樣本放在圖表上。但是如果你知道實現它的方法,我一定會使用它! –
戈登的解決方案已經做到了。我在問,因爲我在考慮使用MATCH_RECOGNIZE的解決方案(因爲您使用的是Oracle 12,它可用)。 – mathguy