Mar*_*ark 3 mysql sql row datediff
我有一个TABLEwith Columns: USER_ID,TIMESTAMP和ACTION
每一行都告诉我哪个用户在某个时间戳做了什么操作。
例子:
我想要一个用户列表,其中包含启动应用程序的第一行和关闭应用程序的最后一行之间的时间差。
这是我尝试这样做的方法:
SELECT USER_ID,DATEDIFF(
(SELECT timestamp FROM MOBILE_LOG WHERE ACTION="START_APP" AND USER_ID="Alice" order by TIMESTAMP LIMIT 1),
(SELECT timestamp FROM MOBILE_LOG WHERE ACTION ="CLOSE_APP" AND USER_ID="Alice" order by TIMESTAMP LIMIT 1)
) AS Duration FROM MOBILE_LOG AS t WHERE USER_ID="Alice";
Run Code Online (Sandbox Code Playgroud)
我要求两个 SELECT 查询之间的 DATEDIFF,但我只得到一个 Alice`s 的列表,其中 -2 作为 Duration。
我在正确的轨道上吗?
我认为您应该按 USER_ID 对该表进行分组,并为每个用户找到“START_APP”的最小日期和“CLOSE_APP”的最大值。您还应该在DATEDIFF 中先使用CLOSE_APP 时间,然后使用 START_APP 时间,在这种情况下,您将获得正值结果
SELECT USER_ID,
DATEDIFF(MAX(CASE WHEN ACTION="CLOSE_APP" THEN timestamp END),
MIN(CASE WHEN ACTION="START_APP" THEN timestamp END)
) AS Duration
FROM MOBILE_LOG AS t
GROUP BY USER_ID
Run Code Online (Sandbox Code Playgroud)