SQL获取每天每个用户的小时数

时间:2019-05-11 15:49:16

标签: mysql sql amazon-redshift

表“ 日志”具有以下列:

SystemName
User
Datetime - it's a timestamp
Status - has the values Start or Stop. 

我需要编写一个查询,该查询将给我: 每天每个用户在系统X上花费的小时数。

请参见下面的示例数据:

X, Amit, 05/01/2019 08:45:00, Start
X, Amit, 05/03/2019 13:25:00, Stop
X, Dave, 05/01/2019 09:10:35, Start
X, Dave, 05/01/2019 17:35:42, Stop

输出:

Amit,05/01/2019, 15h
Amit,05/02/2019, 24h
Amit,05/03/2019, 9h
Dave,05/01/2019, 8h

到目前为止,我的方法: 我当时想我可以使用超前或滞后来获得同一行中的连续时间。但对于用户Amit而言,则需要跨越数天。也可能有一个用户在同一天多次启动和停止。即使我这样做,我怎么也可以为范围内的日期生成小时数。你能帮我吗?

2 个答案:

答案 0 :(得分:0)

这应该有效。如果用户在一天内同时具有“开始”和“停止”状态,则只会获得花费的小时数。

SELECT SystemName,[user],
CONVERT(varchar, CAST(Datetime AS DATETIME), 1) Datetime,
DATEDIFF
(
    HH,
    MAX(CASE WHEN Ststus = 'Start' THEN [Datetime] ELSE NULL END ),
    MAX(CASE WHEN Ststus = 'Stop' THEN Datetime ELSE NULL END )
)HourSpent
FROM your_table A
GROUP BY SystemName,[User],
CONVERT(varchar, CAST(Datetime AS DATETIME), 1)

答案 1 :(得分:0)

由于输出每位用户+天包含一行,因此您需要将数据加入日期日历表。

您将需要一种方法来提取给定用户的“开始”和“停止”时间戳对,将其加入日历表,然后计算当天的开始和停止时间之间的小时数。 (小时数可以使用User Defined Function

那很复杂。坦白说,我宁愿编写一个Python程序来解析数据,而不是通过SQL来完成。这将非常简单:

  • 读取起始行
  • 读取结束行
  • 循环浏览,每天输出小时(在Python中非常简单)

有时最好的锤子是扳手。 (翻译:有时使用其他工具会更好。)