SQL计数行,其中id = x,其他max(id)分组在同一个表中

时间:2016-10-22 10:39:22

标签: mysql sql count

我需要计算一个表中的行,其中字段event_id = 17,并且它们不是表中的任何其他记录,其中g_event_id较高且prim_cid的值相同。我的表包含电话事件。同一个呼叫的所有事件共享字段" prim_cid"。如果字段event_id = 17我知道该调用在queuee中,但是一旦它回答了表中的新条目(相同的prim_cid),但发生了其他event_id。所以我需要使用event_id = 17来计算行数,而后来的记录没有相同的prim_cid。

我的表:

事件:

g_event_id   prim_cid   event_id   event_time
----------   --------   --------   ----------
1            1          16         2016-10-21 16:00:00
2            1          17         2016-10-21 16:00:01
3            1          18         2016-10-21 16:00:02
4            2          15         2016-10-21 16:01:01
5            2          17         2016-10-21 16:01:02
6            3          16         2016-10-21 16:02:01
7            3          17         2016-10-21 16:02:02
8            3          18         2016-10-21 16:02:38

从此我想得到结果:

1 

(因为只有prim_cid 2在字段g_event_id上没有更高的记录) 此外,我想做一个选择,我得到的记录如下:

g_event_id   prim_cid   event_id   event_time
----------   --------   --------   ----------
5            2          17         2016-10-21 16:01:02

当然在另一个sql选择中:)

2 个答案:

答案 0 :(得分:1)

您想要计算“知道”event_id 17的prim_cids,但没有比17事件更高的其他g_event_id。这直接转换为SQL:

SELECT COUNT(DISTINCT seventeens.`prim_cid`)
FROM `events` AS seventeens
  LEFT JOIN `events` AS laters ON (seventeens.`prim_cid` = laters.`prim_cid` AND laters.`g_event_id` > seventeens.`g_event_id`)
WHERE seventeens.`event_id` = 17
  AND ISNULL(laters.`prim_cid`)

为了完成第二个语句,您将对同一语句使用以下SELECT子句:

SELECT DISTINCT seventeens.* 
FROM ...

答案 1 :(得分:1)

在这里你去:)。

SELECT COUNT(ev1.prim_cid)
FROM events ev1
WHERE ev1.event_id = 17
AND (SELECT prim_cid 
            FROM events 
            WHERE g_event_id > ev1.g_event_id 
            AND prim_cid = ev1.prim_cid) IS NULL;