Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql id=x和其他最大值(id)分组在同一个表上的SQL计数行_Mysql_Sql_Count - Fatal编程技术网

Mysql id=x和其他最大值(id)分组在同一个表上的SQL计数行

Mysql id=x和其他最大值(id)分组在同一个表上的SQL计数行,mysql,sql,count,Mysql,Sql,Count,我需要计算一个表中的行数,其中字段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 pr

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

您希望统计“知道”事件id 17但没有其他g\u事件id高于17事件id的原始CID。这将直接转换为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 ...

您希望统计“知道”事件id 17但没有其他g_事件id高于17事件id的原始CID。这将直接转换为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 ...
给你:)

给你:)


谢谢,但我得到了这个错误:执行查询时出错。字段列表中的“prim_cid”列模棱两可。将其更改为从
事件中选择计数(不同的17个。prim_cid)作为17个左连接
事件
作为后连接(17个)。
prim_cid
=后。
prim_cid
和后。
g_事件id
>17个。
g_事件id
)其中17个。
event\u id
=17,ISNULL(laters.
prim\u cid
)工作!非常感谢!谢谢你的更正。前缀在写的时候丢失了。谢谢,但是我得到了这个错误:执行查询时出错。字段列表中的“prim_cid”列模棱两可。将其更改为从
事件中选择计数(不同的17个。prim_cid)作为17个左连接
事件
作为后连接(17个)。
prim_cid
=后。
prim_cid
和后。
g_事件id
>17个。
g_事件id
)其中17个。
event\u id
=17,ISNULL(laters.
prim\u cid
)工作!非常感谢!谢谢你的更正。前缀在书写过程中丢失。这实际上是一种比公认答案更好的方法,因为它不使用
count(distinct)
。但是,这个版本最好使用
not exists
编写。非常感谢@Gordon在性能方面我认为not exists和IS NULL是一样的,但是在可读性方面我同意not exists更好。它们只是在这种情况下碰巧是一样的,因为
prim_cid
不能
NULL
(大概)。您已经尝试过这个方法,但它不起作用,结果总是空的。这实际上是一个比公认答案更好的方法,因为它不使用
count(distinct)
。但是,这个版本最好使用
not exists
编写。非常感谢@Gordon在性能方面我认为not exists和IS NULL是一样的,但是在可读性方面,我同意not exists更好。它们只是在这种情况下碰巧是一样的,因为
prim_cid
不能
NULL
(大概是吧)。我已经试过了,但不起作用,结果总是空的。