我需要在一个表中计算行,其中字段event_id = 17,并且它们不是表中具有更高g_event_id和prim_cid相同值的任何其他记录。我的表包含电话事件。同一调用的所有事件共享字段"prim_cid"。如果字段event_id = 17我知道调用在队列中,但一旦它回答了表中的新条目(相同的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中选择当然:)
您想要统计"知道"一个event_id 17但没有其他g_event_id高于17-event的prim_cids。这直接转换成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 ...
给你
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;