2016-10-22 93 views
0

我需要计数一个表中的行,其中的字段event_id = 17,并且它们不是g_event_id较高的表中的任何其他记录,并且prim_cid的值相同。我的表格包含打电话的事件。同一个调用的所有事件共享字段“prim_cid”。如果字段event_id = 17,我知道这个调用在queuee中,但是尽快它在table(相同的prim_cid)中回答了一个新的条目,但是发生了其他的event_id。所以我需要用event_id = 17来计算行,并且以后不会有相同的prim_cid记录。SQL计数行,其中id = x和其他最大(id)分组在同一个表

我的表:

事件:

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 SELECT当然:)

+0

为什么'当然'? – Strawberry

回答

1

你想算prim_cids谁“知道”的事项标识17,但有没有其他g_event_id即高,比17事件。这直接转化为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 ... 
+0

谢谢,但我得到这个错误:执行查询时出错。 列 'prim_cid' 在字段列表是不明确的 – Kristian

+0

它更改为 SELECT COUNT(DISTINCT seventeens.prim_cid) FROM'events' AS seventeens LEFT JOIN'ON(seventeens.'prim_cid' = laters.'prim_cid events' AS laters '和laters.'g_event_id'> seventeens.'g_event_id') WHERE seventeens.'event_id' = 17 AND ISNULL(laters.'prim_cid') 工程!非常感谢! – Kristian

+0

感谢您的更正。前缀在写作时丢失了。 – Arrmaniac

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; 
+0

这实际上比接受的答案更好,因为它不使用“count(distinct)”。但是,使用'not exists'编写这个版本会更好。 –

+0

非常感谢@Gordon在性能方面,我认为NOT EXISTS和IS NULL是一样的,但是在可读性方面,我同意NOT EXISTS更好。 – noodlesegg

+0

它们在这种情况下只发生在相同的情况,因为'prim_cid'不能是'NULL'(推测)。 –

相关问题