sql - DELETE 查询销毁记录组中每月除最近记录和每条第一条记录之外的所有记录

标签 sql postgresql sql-delete

我想创建一个 SQL DELETE 查询,在一个语句中删除除以下内容之外的所有内容:

  • 最新记录
  • 以及上个月除第一个记录之外的所有记录

在一组记录内。我在这里做了一个 SQL fiddle 示例:http://www.sqlfiddle.com/#!15/2272a

删除的结果应该是,从组og记录(other_table_id = 1的记录)中,仅剩下的应该是:

('2017-01-02', 1), 
('2017-03-24', 1),
('2017-04-03', 1), 
('2017-05-24', 1),
('2017-12-14', 1)

这是否可以在一个查询中完成,还是需要在多个查询中完成?

最佳答案

试试这个:

DELETE FROM example_table
WHERE ID NOT IN(
  SELECT ID FROM(
  select id
    ,ROW_NUMBER() OVER(PARTITION BY date_part('year',created_at),date_part('month',created_at) ORDER BY ID)Rn 
    from example_table WHERE other_table_id =1
    )D
  WHERE RN=1);

  SELECT * FROM example_table;

# SQL Fiddle

关于sql - DELETE 查询销毁记录组中每月除最近记录和每条第一条记录之外的所有记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49855860/

相关文章:

Mysql - 来自 1 个表的 3 个单独的总和 - 工作 - 搜索更好的查询

postgresql - 如何使用 LIKE 查询在 PostgreSQL 中找到文字百分号 (%)?

sql - Left Join Lateral 和数组聚合

mysql - 我不能在sql delete中使用别名

PHP删除功能?

SQL 错误 - 缺少关键字

sql - 通过 select * from exec(MySP) 创建 View

performance - PostgreSQL 查询计划是否取决于表行数?

mysql - 时间戳和mysql

mysql - 根据另一个表的 'similar' 值从一个表中检索记录