ansi sql如何选择自表中最早时间戳以来的天数

Posted

技术标签:

【中文标题】ansi sql如何选择自表中最早时间戳以来的天数【英文标题】:ansi sql how to select number of days since oldest timestamp in table 【发布时间】:2021-01-06 06:30:36 【问题描述】:

如果数据累积超过 X 天,我想截断一个表

所以我想我会首先选择最旧的时间戳,大概是在时间戳列上使用 MIN 函数。

然后计算该值与 current_timestamp 之间经过的天数。

有没有统一的sql语句来做这个(经过天数的结果,不是截断)

【问题讨论】:

"ANSI" SQL 并不是特别有用。请用您真正使用的数据库标记问题。 为什么你认为你需要最旧的时间戳?我认为知道记录是否超过 X 天更有用。 (这就是“截断”意味着删除超过 X 天的记录) 也许Number of days between two dates - ANSI SQL 有帮助? 寻找统一的答案。是的,我可以在两个 sql 调用中做到这一点,但只是想知道是否有人有统一的语句解决方案 你真的只是想做一个delete from YOUR_TABLE where RECORD_DATE < (sysdate - 365);吗? (这是 Oracle 风格的,但概念是相同的。)如果这还不够,那么我认为您需要在帖子中添加更多细节。 【参考方案1】:

在 ANSI SQL 中,这将是:

select current_timestamp - min(the_timestamp_column)
from the_table;

这会返回一个interval 值。

要删除超过 x 天的行,您可以使用带有相应 WHERE 子句的 DELETE 语句:

delete from the_table
where the_timestamp_column < current_timestamp - interval '42' day;

【讨论】:

从表中选择日期(current_timestamp - min(col)); @GiannaGiavelli, DAY() 函数不是 ANSI SQL。

以上是关于ansi sql如何选择自表中最早时间戳以来的天数的主要内容,如果未能解决你的问题,请参考以下文章

两个日期之间的天数 - ANSI SQL

为每个员工选择一天中最早时间戳的完整记录[重复]

SQL 从其他表中给定时间戳后的记录中选择

SQL 查询:如何在排名列值中使用时间戳列

读取悖论时间戳字段

如何在 Jooq 中选择 unix 时间戳作为日期?