MySql:使用相同的列值获得最短,最长,平均持续时间(使用单个查询?)

时间:2018-01-17 11:26:31

标签: mysql

这可能不是最佳设计,但我有一个包含三个唯一索引的表(邀请者,被邀请者和事件),时间戳和动作,可能的值为INVITE和ACCEPT。

CREATE TABLE IF NOT EXISTS `events` 
(
  `inviter` int unsigned NOT NULL,
  `invitee` int unsigned NOT NULL,
  `event` int unsigned NOT NULL,
  `action` int unsigned NOT NULL,  -- 1 = invite, 2 = accept
  `time_stamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) DEFAULT CHARSET=utf8;

这可能是一个糟糕的设计,因为将INVITE与ACCEPT匹配的方法是找到这三个索引相同且行动的行 - INVITE / ACCEPT。对于邀请者,被邀请者和被邀请者的相同值,可能存在多个ACCEPT。事件;可能也没有接受(但总有一个邀请)。

我想得到

  • 邀请者,被邀请者和被邀请者的任意组合的INVITE / ACCEPT对之间的最短持续时间。事件 - 谁最快接受邀请?

  • 谁花了最长时间接受?

  • 接受的平均时间是多少?

我不知道从哪里开始设计合适的SELECT查询。至少,如果我试图用一个查询来做这件事 - 那可以吗?我可以通过多个查询&一些PHP代码。

我可以看到如何使用

获取INVITE和ACCEPT时间
SELECT time_stamp AS ts_invite FROM events WHERE action=1 
       GROUP BY inviter, invitee, event;

SELECT time_stamp AS ts_accept FROM events WHERE action=2 
       GROUP BY inviter, invitee, event;

但不是如何获得邀请者,被邀请者和被邀请者的每个组合的时间差异。 event - 我使用JOIN或嵌套的SELECT语句吗?

0 个答案:

没有答案