【问题标题】:How to remove duplicate rows based on condition without creating temp table [duplicate]如何在不创建临时表的情况下根据条件删除重复行[重复]
【发布时间】:2020-02-29 17:59:32
【问题描述】:

谁能帮我得到一个结果查询。我已经被困在这里几个小时了。抱歉,我刚接触 SQL。我需要从 Column1 和 Column2 中获取不重复值的最新日期(column3)

SELECT COLUMN1, COLUMN2, COLUMN3
FROM TABLE1 t1
LEFT JOIN
     TABLE2 t2
 ON t1.column1 = t2.column1

表值:

COLUMN1        COLUMN2        COLUMN3
VAL1             1234        2019-05-12    
VAL1             1234        2019-04-12
VAL1             1234        2019-12-12
VAL2             4321        2019-11-12
VAL2             3333        2019-12-12
VAL3             2222        2019-10-10

预期结果:

COLUMN1         COLUMN2        COLUMN3
VAL1             1234        2019-12-12
VAL2             3333        2019-12-12
VAL3             2222        2019-10-10

【问题讨论】:

  • 不适用于 'Val2' @HoneyBadger ;因为您需要在COLUMN2 上进行分组,从而产生2 行,或者将MAX 应用于Val2,这将返回4321 而不是3333。这需要通用的ROW_NUMBER 解决方案。
  • 您好,我使用了 MAX() 和 DISTINCT 以及 GROUP BY,但我无法获得我期望的输出。有什么想法吗?
  • @ArvinJohnSalandanan 有 3 个重复项。所有这些都向您展示了如何使用 CTE/子查询和 ROW_NUMBER 来实现这一目标。
  • 所以我真的需要使用临时表来实现这一点吗?
  • 感谢@Larnu 提供资源。非常感谢。

标签: sql-server tsql duplicates sql-delete


【解决方案1】:

SQL Fiddle

MS SQL Server 2017 架构设置

create table MyTable (COL1 varchar(max), COL2 int,COL3 date)
insert into MyTable (COL1, COL2,COL3 )VALUES('VAL1',1234,'2019-05-12')
insert into MyTable (COL1, COL2,COL3 )VALUES('VAL1',1234,'2019-04-12')
insert into MyTable (COL1, COL2,COL3 )VALUES('VAL1',1234,'2019-12-12')
insert into MyTable (COL1, COL2,COL3 )VALUES('VAL2',4321,'2019-12-12')
insert into MyTable (COL1, COL2,COL3 )VALUES('VAL2',3333,'2019-12-12')
insert into MyTable (COL1, COL2,COL3 )VALUES('VAL3',2222,'2019-10-10')

查询 1

select t.COL1,t.COL2,t.COL3
from (select m.*,
             row_number() over (partition by m.COL1
                                order by m.COL2,m.COL3 desc) as seqnum
      from MyTable m
     ) t
where t.seqnum=1

Results

| COL1 | COL2 |       COL3 |
|------|------|------------|
| VAL1 | 1234 | 2019-12-12 |
| VAL2 | 3333 | 2019-12-12 |
| VAL3 | 2222 | 2019-10-10 |

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2019-04-03
    • 2013-04-23
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-26
    相关资源
    最近更新 更多