SQL Query忽略后续的不同行

时间:2016-08-26 10:37:17

标签: php mysql sql isqlquery

我有一张桌子,

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 * FROMORDER 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中不够称职,以便将这些应用到我的示例中。

关于我如何能够做到这一点的任何想法?

2 个答案:

答案 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