2013-07-29 34 views
0

我有我使用的嘗試和理解SQL MAX()超過()功能如下一個簡單的查詢:SQL MAX()以上(分區)返回多個結果

select *, max(mt.version) over (partition by mt.version) 
from myTable mt 
where mt.id = 'some uuid'; 

編輯:這個概念對我來說是新的,所以我不確定它應該做什麼。我沒有特定的數據集,我只是試圖通過提出自己的示例來了解代碼的作用。

我不明白的是我得到了多行數據集。我認爲max()over(partition by x)功能應該返回基於max函數的單個結果。請有人解釋爲什麼我會得到超過1個結果。我在不同的桌子上試過這個,它工作正常,但在另一張桌子上它不起作用。

+3

那麼,對於'mt.version'的每個不同值,你只取一個最大值......實際上,由於你正在使用'mt.version'的最大值並通過'mt.version'分區它, ,我不認爲你會得到任何新的數據。你究竟在嘗試做什麼? – 2013-07-29 22:34:36

+1

如果你不知道它幹了什麼,你爲什麼要用'over'?這是可選的,你知道嗎?它看起來像你只想'max'沒有'over(partition by)' – Blorgbeard

+0

我正在玩弄它,正如問題中所建議的那樣,「理解...功能」。我在網上看到類似的東西,並試圖弄清楚它做了什麼。因此,當我不知道它做什麼時使用它......這就是你如何學習不是它? –

回答

1

我正在使用mt.version的最大值並通過mt.version進行分區,所以我沒有收到任何新數據。什麼我以前寫的一個正確的版本可能是:

select *, max(mt.version) over (partition by mt.partitiongroup) 
from mytable mt 
where mt.id = 'some uuid'; 

我是不是在嘗試這個新概念,該分區組必須比最大聚集不同的實現。

+1

+1以便正確理解。這與您的問題類似:http://stackoverflow.com/questions/10477085/oracle-partition-by-and-row-number-keyword/ –

+0

謝謝@Michael的鏈接。這也有助於我的理解。 –