Oracle:如何更新表中的"过时"日期?

use*_*011 1 sql database oracle oracle11g sql-update

我们的用例:

对于表格USERS:

如果用户处于非活动状态(列)超过该分钟,则更新所有行('N'列的设置值ACTIVE).'LAST_VISIT'60

Google帮助我找到了如何获取db中的当前时间(我使用Oracle):

SELECT sysdate FROM dual;
Run Code Online (Sandbox Code Playgroud)

然后我找到了如何找到两个日期之间的分钟差异的方法:

SELECT(date1 - date2)*1440
Run Code Online (Sandbox Code Playgroud)

看起来有点难看......但还可以.

现在,我正在努力将所有这些结合在一起:

UPDATE USERS u 
SET ACTIVE='N' 
WHERE  SELECT((SELECT sysdate FROM dual) - u.LAST_VISIT)*1440 >60;
Run Code Online (Sandbox Code Playgroud)

能否请您查看我的最终查询.

好吗?或者,也许,可以优化它?

Jus*_*ave 6

您可以简化查询

UPDATE users u
   SET active = 'N'
 WHERE u.last_visit < sysdate - interval '1' hour;
Run Code Online (Sandbox Code Playgroud)

如果有一个索引last_visit可用于查询(因为谓词具有足够的选择性),则此查询可能会使用该索引.