组内的两个日期之间的SQL不同

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

我有这张桌子 -

----------------------------------------------
ID  | user   | eventID   | type   | timestamp
----------------------------------------------
1   | 1      | 1         | 3      | 2019-02-08 15:30:00
2   | 1      | 1         | 3      | 2019-02-08 15:31:00
3   | 1      | 1         | 9      | 2019-02-08 15:31:30
4   | 2      | 1         | 3      | 2019-02-08 15:32:00
5   | 2      | 1         | 3      | 2019-02-08 15:32:45
6   | 3      | 1         | 3      | 2019-02-08 15:33:00
7   | 3      | 1         | 9      | 2019-02-08 15:34:00
8   | 3      | 2         | 3      | 2019-02-08 15:35:00
9   | 3      | 2         | 9      | 2019-02-08 15:36:00

我正在尝试为每个用户找到每个事件的类型3和类型9之间的时间差。

例如,该表的输出将是 -

----------------------------------------------
ID  | user   | eventID   | timeDifference in sec
----------------------------------------------
1   | 1      | 1         | 30
2   | 3      | 1         | 60
3   | 3      | 2         | 60

如您所见,每个用户可以拥有多个事件,不同的用户也可以拥有相同的事件。有些用户和事件都有这两种类型,有些则没有。可能有多个类型3和类型9事件,但我想要彼此最接近的事件之间的差异。类型9总是在类型3之后发生。我还有一个单独的列,对于类型9事件具有不同的ID,如果这有用的话。所以我试图为每个用户找到每个事件的这两种类型之间的时差。

我该怎么做呢?

编辑 - 我忘了提到每个用户可以为每个事件设置多对类型3和类型9事件。所以我希望所有这些对的差异,彼此相邻,而不是每组的差异。

对于这张表 -

----------------------------------------------
ID  | user   | eventID   | type   | timestamp
----------------------------------------------
1   | 1      | 1         | 3      | 2019-02-08 15:30:00
2   | 1      | 1         | 3      | 2019-02-08 15:31:00
3   | 1      | 1         | 9      | 2019-02-08 15:31:30
4   | 2      | 1         | 3      | 2019-02-08 15:32:00
5   | 2      | 1         | 3      | 2019-02-08 15:32:45
6   | 3      | 1         | 3      | 2019-02-08 15:33:00
7   | 3      | 1         | 9      | 2019-02-08 15:34:00
8   | 3      | 2         | 3      | 2019-02-08 15:35:00
9   | 3      | 2         | 9      | 2019-02-08 15:36:00
10  | 3      | 2         | 3      | 2019-02-08 15:37:00
11  | 3      | 2         | 9      | 2019-02-08 15:37:40

产出将是 -

----------------------------------------------
ID  | user   | eventID   | timeDifference in sec
----------------------------------------------
1   | 1      | 1         | 30
2   | 3      | 1         | 60
3   | 3      | 2         | 60
4   | 3      | 2         | 40

编辑 - 我用编辑问了一个不同的问题。这里的原始问题已经回答了。

mysql sql date date-difference
1个回答
1
投票

这回答了问题的原始版本:

select user, eventid,
       (to_seconds(min(case when type = 9 then timestamp end)),
        to_seconds(max(case when type = 3 then timestamp end))
       ) as diff_seconds
from t
group by user, eventid;

这将返回最早的“9”时间戳和最新的“3”时间戳之间的差异。

© www.soinside.com 2019 - 2024. All rights reserved.