首页 > 解决方案 > 您如何编写将当前时间戳减去 30 分钟的 CASE?

问题描述

我正在尝试编写一个用“是”或“否”替换最新时间戳的案例,具体取决于它是否在过去 30 分钟(或最后一小时)内。

我目前有以下内容,它适用于当前时间戳,但我想将当前时间向后退 30 分钟。

CASE
    WHEN max(timestamp) > (CURRENT_TIMESTAMP) THEN 'Yes'
    WHEN max(timestamp) < (CURRENT_TIMESTAMP) THEN 'No'
END

据我了解它CURRENT_TIMESTAMP是 Unix,所以我尝试从中减去一个数字,但没有奏效;

CURRENT_TIMESTAMP - 0.00833

我收到以下错误;

No operator matches the given name and argument types. You might need to add explicit type casts.

我也尝试过使用ADDDATE(mi,-30,CURRENT_TIMESTAMP)(CURRENT_TIMESTAMP - (max(timestamp)))但没有让其中任何一个工作。

任何帮助将非常感激。

标签: sqlpostgresql

解决方案


在标准 SQL 中,这看起来像:

(CASE WHEN MAX(timestamp) > CURRENT_TIMESTAMP - INTERVAL '30 MINUTE'
      THEN 'Yes' ELSE 'NO'
 END)

但是,数据库之间的日期/时间函数差异很大,因此确切的语法取决于您使用的数据库。

(注意:上述逻辑会调整您的逻辑,因此时间戳完全匹配 - 30 分钟返回NO而不是NULL。)


推荐阅读