我需要计算一个表中的行,其中字段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选择中:)
答案 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;