2015-01-04 81 views
-2

我有一個SQL問題。我有以下表格:按多列分組,然後選擇另一列的最大值小於特定值的記錄

ID A B C 
1 A1 B1 C1 
2 A1 B1 C2 
3 A2 B2 C3 
4 A1 B1 C3 
5 A2 B2 C2 
6 A3 B1 C1 
7 A1 B1 C4 
8 A2 B1 C1 

我想從'A'和'B'相同的每個組中選擇一行。例如行1,2,4和7形成一個組,其中A ='A1'& B ='B1'。在這些組中,我希望在'C'列中具有最大值的記錄不大於'C3',所以在上述組中記錄#4。

下面是結果集我在尋找:

ID A B C 
4 A1 B1 C3 
3 A2 B2 C3 
6 A3 B1 C1 
8 A2 B1 C1 
+5

這是一個非常糟糕的問題的標題...此外,StackOverflow的是不是*我需要編寫代碼,給我的代碼*。這是關於*這是我所嘗試的,這是我面臨的問題。你能幫我修理嗎?*。所以,**你有什麼嘗試?** – MarcinJuraszek

+0

你可以發佈你已經嘗試過的,以及爲什麼它沒有給出預期的輸出? – MondKin

+0

實際查詢比這更復雜,有3個連接和數十列。這就是我沒有展示我已經嘗試過的原因 - 我認爲這是令人困惑的。 – user2429448

回答

1

你可以使用一個CTE和排序功能:

WITH CTE AS 
(
    SELECT ID, A, B, C, 
      RN = ROW_NUMBER() OVER (PARTITION BY A, B ORDER BY C DESC) 
    FROM dbo.TableName 
    WHERE C <= 'C3' 
) 
SELECT ID, A, B, C 
FROM CTE 
WHERE RN = 1 
0

這可能會給你想要的東西:

Select A, B, Max(C) as maxC 
(
    Select * 
    From SomeTable 
    Where C <= 'C3' 
) as nested 
Group By A, B 
0

試試這個,

SELECT * 
FROM (SELECT *, 
       Row_Number() 
       OVER (
        PARTITION BY A, B 
        ORDER BY C DESC) AS RN 
     FROM #TEMP)A 
WHERE RN = 1 
0

試試這個,

SELECT DISTINCT ID,A, 
      B,C 
    FROM (SELECT Row_number() 
      OVER(
       partition BY A, B 
       ORDER BY id, c DESC)rn, 
      * 
    FROM tabl1)p 
WHERE rn IN(1, 3) 
    AND id > 1 
相關問題