我有一个带有记录的表,我想删除所有重复的记录 名称,年龄,日期是我从文件中获取的列。
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
您能帮我查询吗?
谢谢。
答案 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