У меня есть стол,
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
Таблица ORDER
BY
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, чтобы применить их к моему примеру.
Любые идеи о том, как я смогу сделать это?
Я не совсем уверен, что понял проблему. Но это, пожалуй, то, что вы ищете:
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 () А ТАКЖЕ РАЗДЕЛЕНИЕ
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