如何从SQL Server删除重复记录?

时间:2019-04-05 10:28:21

标签: sql sql-server tsql

我有一个带有记录的表,我想删除所有重复的记录 名称,年龄,日期是我从文件中获取的列。

  • CREATE_DATE是我加载文件时捕获的列。
  • file_id来自我根据file_log_sys表生成的ID
  • stage_id是一个身份列

样本数据:

stage_id name age       date         file_id  create_date
---------------------------------------------------------
   1     john   25     2019-02-02    100       2019-04-04
   2     sam    50     2019-01-13    100       2019-04-04
   3     john   25     2019-02-02    101       2019-04-05   
   4     peter  33     2019-01-01    101       2019-04-05

我想删除file_id = 100和stage_id = 1且name = john的记录

我尝试过:

delete min(file) id 
from table 

它不起作用。

我希望输出为

stage_id name   age    date        file_id     create_date
-----------------------------------------------------------
   2     sam    50     2019-01-13    100       2019-04-04
   3     john   25     2019-02-02    101       2019-04-05   
   4     peter  33     2019-01-01    101       2019-04-05

您能帮我查询吗?

谢谢。

3 个答案:

答案 0 :(得分:3)

使用row_number()

with cte as
(
    select *,row_number() over(partition by name order by create_Date desc) as rn
    from tablename
)

delete from cte where rn<>1

答案 1 :(得分:0)

不确定我是否完全理解您的问题,但是如果您只想删除file_id = 100且stage_id = 1且name = john的记录,它就很简单:

delete from your_table where file_id = 100 and stage_id = 1 and name = 'john';

答案 2 :(得分:0)

使用RowNumber()

def print_event_for(min_, max_):
    reminder = min_ % 2
    for i in range(min_+reminder, max_+reminder, 2):
        print(i)

print_event_for(5, 12)

替代方式

6
8
10
12