去猜測你的意思是每個ListID內最高水平。如果是這樣的話,那麼這裏是SQL根據級別對行進行排名,然後外部查詢過濾到頂級點擊(在這種情況下是最高級別)。
SELECT TargetID, CategoryID, ListID, Level
FROM
(
SELECT
TargetID, CategoryID, ListID, Level,
DENSE_RANK() OVER (PARTITION BY ListID ORDER BY Level DESC) AS LevelRank
FROM ...
) Ranked
WHERE Ranked.LevelRank = 1
更多的膽量:
- PARTITION BY設置爲ListID使得它使我們的排名爲每個ListID(獨立設置例如,如果ListID 14的最高水平是4,我們會保持即使其他一些ListID的最高級別爲5)。如果您希望它是全球最高級別(獨立於ListID),那麼只需刪除「PARTITION BY ListID」片段
- ORDER BY定義排名順序;在這種情況下,最高級別排名第一。在每個級別有多個TargetID的情況下,這將它們排列爲平局,因此兩者都將被返回。但是,如果您只想爲每個ListID獲取1行,請將「,TargetID」拖入ORDER BY子句中。
這裏是,如果你想在所有的數據的最高水平(例如,5),然後就返回任何行與水平(同樣的事情上面一個查詢的版本,但沒有分區):
SELECT TargetID, CategoryID, ListID, Level
FROM
(
SELECT
TargetID, CategoryID, ListID, Level,
DENSE_RANK() OVER (ORDER BY Level DESC) AS LevelRank
FROM ...
) Ranked
WHERE Ranked.LevelRank = 1
你可以發佈獲取結果集的查詢嗎? –
這是對視圖的選擇。該視圖無法更改,因爲它在其他地方使用 – BlueChameleon
其他3列很明顯,但如果這些值彼此獨立,爲什麼'ListID'的37和29都是? – paqogomez