SQL-запрос игнорирует последующие отдельные строки

У меня есть стол,

C_A C_B C_C  C_D
 mr  1  1000  d
 mrs 2  500   d
 mz  3  2500  d
 mrs 4  1500  d

Я бы хотел SELECT * FROM Таблица ORDERBY C_C DESC но я хотел бы игнорировать любые последующие (после упорядочивания) строки, в которых столбец A (C_A) такой же, как строки, имеющие большее значение в столбце C.

так должно выглядеть так:

C_A C_B C_C  C_D
 mz  3  2500  d
 mrs 4  1500  d
 mr  1  1000  d

когда выходной

Я пробовал много разных запросов и подзапросов в использовании DISTINCT и, группируя столбец C_A, но я недостаточно компетентен в SQL, чтобы применить их к моему примеру.

Любые идеи о том, как я смогу сделать это?

2 ответа

Решение

Я не совсем уверен, что понял проблему. Но это, пожалуй, то, что вы ищете:

select t1.*
from tablename t1
  join (select C_A, max(C_C) as maxcc
        from tablename
        group by C_A) t2
  on t1.C_A = t2.C_A and t1.C_C = t2.maxcc

добавлять ORDER BY t1.C_C desc в конце, если нужно.

Используйте ROW_NUMBER() И PARTITION By

Declare @tblTest AS Table
(
    C_A VARCHAR(50),
    C_B  INT,
    C_C INT,
    C_D VARCHAR(50)
)


INSERT INTO @tblTest VALUES('mr',1,1000,'d')
INSERT INTO @tblTest VALUES('mrs',2,500,'d')
INSERT INTO @tblTest VALUES('mz',3,2500,'d')
INSERT INTO @tblTest VALUES('mrs',4,1500,'d')


SELECT 
    C_A ,
    C_B ,
    C_C ,
    C_D 
FROM
(
    SELECT 
        C_A ,
        C_B ,
        C_C ,
        C_D ,
        ROW_NUMBER() OVER(Partition BY C_A Order by  C_A,C_D) AS PartNo
    FROM
    @tblTest
)X
WHERE X.PartNo=1
Другие вопросы по тегам