2015-01-04 2 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

Вы можете использовать КТР и ранжирования функции:

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 
Смежные вопросы