【问题标题】:SQL Oracle incremental counterSQL Oracle 增量计数器
【发布时间】:2023-02-22 17:30:33
【问题描述】:

我有一个问题要问你希望你能帮助我。

这是我的桌子:

Username   Time     Action
--------   ------   ------
Franck     10.11    LogIn
Mark       10.14    LogIn
Luke       10.17    LogIn
Mark       10.18    LogOut
Mary       10.21    LogIn

我希望有一个计数器列在每次发现登录操作时添加 +1,并在每次出现注销操作时删除 -1。

像这样:

Username   Time     Action   Counter
--------   ------   ------   -------
Franck     10.11    LogIn      1
Mark       10.14    LogIn      2
Luke       10.17    LogIn      3
Mark       10.18    LogOut     2
Mary       10.21    LogIn      3

我怎样才能做到这一点?

我试图添加一个 countif 但这不是正确的方法

【问题讨论】:

  • 你可以使用sum()函数并有一个案例,这样当你logIn时它递增1,当你logOut递减1时,然后使用over命令这样你就可以在你拥有的所有行上执行它SUM(CASE WHEN Action = 'LogIn' THEN 1 WHEN Action = 'LogOut' THEN -1 ELSE 0 END) OVER (ORDER BY Time) AS Counter

标签: oracle


【解决方案1】:

您可以使用 sum 的分析(窗口)变体并将其应用于所有先前行(即 unbounded preceding)和当前行之间:

SELECT   username,
         time,
         action, 
         SUM(CASE action WHEN 'LogIn' THEN 1 WHEN 'LogOut' THEN -1 END) 
             OVER (ORDER BY time ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS counter
FROM     events
ORDER BY time

【讨论】:

    猜你喜欢
    • 2016-10-29
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多