【发布时间】:2022-01-07 15:11:42
【问题描述】:
我每天都在从数据库中捕获数据,方法是使用查询运行插入语句以及运行查询时当前日期的值。
为了防止表格变得太大,我想删除“ID”和“状态”组合与前一天相同的所有值
我的表结构如下:
|日期|电子邮件|状态|
delete from table sct
using
(
select "Email", min("Date") as "First Date of Status", "Status" from table sct
group by "Email", "Status"
) as t1
where sct."Email" = t1."Email" and sct."Date" = t1."First Date of Status" and sct."Status" = t1."Status"
and t1."First Date of Status" is null
由于我只想捕获状态更改的第一个日期,因此我想删除“状态的第一个日期”值为 null 的所有行
但是当我运行这个语句时,原始表中的任何行都没有被删除。
任何关于如何修复此语句或解决此问题的替代方法的反馈将不胜感激。
【问题讨论】:
-
如果你有一个可以用来获取唯一行号的主键列(例如
id),这个问题可能更容易解决。然后您可以使用 CTE WITH 子句来选择要删除的行。类似WITH a AS (SELECT id FROM sct WHERE.....); DELETE FROM TABLE sct WHERE id IN a.id
标签: postgresql sql-delete