要在小时级别上计算登录时间,当您在mysql或tableau中具有登录和注销时间戳记时

问题描述 投票:1回答:1

我有登录和注销时间。需要按小时级别(小时)计算登录时间]

样本输入

Login At "2020-03-01 00:11:23" 
Logout AT "2020-03-02 00:01:00"

样本输出

Date               Hour            Login Hours
2020-03-01          0                  0.82
2020-03-01          1                   1
2020-03-01          2                   1
2020-03-01          3                   1
2020-03-01          4                   1
2020-03-01          5                   1
2020-03-01          6                   1
2020-03-01          7                   1
2020-03-01          8                   1
2020-03-01          9                   1
2020-03-01          10                  1
2020-03-01          11                  1
2020-03-01          12                  1
2020-03-01          13                  1
2020-03-01          14                  1
2020-03-01          15                  1
2020-03-01          16                  1
2020-03-01          17                  1
2020-03-01          18                  1
2020-03-01          19                  1
2020-03-01          20                  1
2020-03-01          21                  1
2020-03-01          22                  1
2020-03-01          23                  1
2020-03-02          0                   0.02
mysql sql date tableau recursive-query
1个回答
0
投票

如果您正在运行MySQL 8.0,则可以通过递归查询来完成。逻辑是在日期范围内的每个小时内进行迭代,并使用login_hours在每一步中计算timestampdiff()

with recursive cte as (
    select 
        date_format(login_at, '%Y-%m-%d %H:00:00') login_at,
        logout_at,
        timestampdiff(
            second,
            login_at,
            date_format(login_at, '%Y-%m-%d %H:00:00') + interval 1 hour
        ) / 60 / 60 login_hours
    from mytable
    union all
    select 
        login_at + interval 1 hour,
        logout_at,
        timestampdiff(
            second,
            login_at + interval 1 hour,
            least(logout_at, login_at + interval 2 hour)
        ) / 60 / 60
    from cte
    where login_at + interval 1 hour < logout_at
)
select date(login_at) date, hour(login_at) hour, round(login_hours, 2) login_hours
from cte
order by login_at

Demo on DB Fiddle

原始数据集:

login_at | logout_at:------------------ | :------------------2020-03-01 00:11:23 | 2020-03-02 00:01:00

查询结果:

日期|小时login_hours:--------- | ---: ----------:2020-03-01 | 0 | 0.812020-03-01 | 1 | 1.002020-03-01 | 2 | 1.002020-03-01 | 3 | 1.002020-03-01 | 4 | 1.002020-03-01 | 5 | 1.002020-03-01 | 6 | 1.002020-03-01 | 7 | 1.002020-03-01 | 8 | 1.002020-03-01 | 9 | 1.002020-03-01 | 10 | 1.002020-03-01 | 11 | 1.002020-03-01 | 12 | 1.002020-03-01 | 13 | 1.002020-03-01 | 14 | 1.002020-03-01 | 15 | 1.002020-03-01 | 16 | 1.002020-03-01 | 17 | 1.002020-03-01 | 18 | 1.002020-03-01 | 19 | 1.002020-03-01 | 20 | 1.002020-03-01 | 21 | 1.002020-03-01 | 22 | 1.002020-03-01 | 23 | 1.002020-03-02 | 0 | 0.02
© www.soinside.com 2019 - 2024. All rights reserved.