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)
能否请您查看我的最终查询.
好吗?或者,也许,可以优化它?
您可以简化查询
UPDATE users u
SET active = 'N'
WHERE u.last_visit < sysdate - interval '1' hour;
Run Code Online (Sandbox Code Playgroud)
如果有一个索引last_visit可用于查询(因为谓词具有足够的选择性),则此查询可能会使用该索引.