我有一张桌子,
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中不够称职,以便将这些应用到我的示例中。
关于我如何能够做到这一点的任何想法?
答案 0 :(得分:0)
我不太确定我理解这个问题。但这也许就是你要找的东西:
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
。
答案 1 :(得分:0)
使用 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