MySQL组增量

时间:2016-07-28 15:07:29

标签: php mysql

我在我的一个应用程序中调整了一个脚本并且我遇到了阻塞。我有一个例行程序,基本上列出了所有候选人的面试,并打印了他们正在进行的职位空缺的面试轮次。这是数据库中的示例表。

+---------+-------------------+------------+
|contactid|interviewtime      |assignmentid| 
+---------+-------------------+------------+
|1        |2016-01-01 10:00:00| 1          |
+---------+-------------------+------------+
|1        |2016-01-02 10:00:00| 1          |
+---------+-------------------+------------+
|1        |2016-01-03 10:00:00| 1          |
+---------+-------------------+------------+
|1        |2016-01-04 10:00:00| 2          |
+---------+-------------------+------------+
|1        |2016-01-05 10:00:00| 2          |
+---------+-------------------+------------+
|1        |2016-01-03 10:00:00| 2          |
+---------+-------------------+------------+

我想制作如下内容:

+---------+-------------------+------------+-----+----+
|contactid|interviewtime      |assignmentid|round|last|
+---------+-------------------+------------+-----+----+
|1        |2016-01-01 10:00:00| 1          |1    |no  |
+---------+-------------------+------------+-----+----+
|1        |2016-01-02 10:00:00| 1          |2    |no  |
+---------+-------------------+------------+-----+----+
|1        |2016-01-03 10:00:00| 1          |3    |yes |
+---------+-------------------+------------+-----+----+
|1        |2016-01-04 10:00:00| 2          |2    |no  |
+---------+-------------------+------------+-----+----+
|1        |2016-01-05 10:00:00| 2          |3    |yes |
+---------+-------------------+------------+-----+----+
|1        |2016-01-03 10:00:00| 2          |1    |no  |
+---------+-------------------+------------+-----+----+

我已经设法让输出工作在PHP中,但是我不得不做两个额外的查询来获得输出,这为我的执行时间增加了1.5秒。我想知道我是否可以让MySQL进行繁重的工作,并希望把这个时间缩短。我确信当前的实现将随着表的增长而成为瓶颈。

编辑[2016-10-31]

我正在使用此查询来添加计算行的窗口函数,但是我遇到了最后一块拼图的问题,也就是说这是否是最后一轮(最大值)。

SELECT a.round_number AS round, a.contactid, a.assignmentid
FROM (
   SELECT @round_number:=CASE WHEN @contactid=contactid THEN @round_number+1 ELSE 1 END AS round_number,@contactid:=contactid AS contactid, assignmentid
   FROM tbl_interviews, (SELECT @round_number:=0,@contactid:='') AS t
ORDER BY contactid DESC) AS a
WHERE a.contactid!= '0'
ORDER BY a.round_number DESC

在此之后,我向父SELECT添加了另一列:

(CASE WHEN MAX(a.round_number) < a.round_number THEN 'no' ELSE 'yes' END) AS last

然而,最后一个条件只返回一行而不是整个数据集,并且是在逃避我。我需要找到该组中的最大回合并在其上运行CASE函数。

1 个答案:

答案 0 :(得分:0)

我不确定您现在使用的两个查询。 但是这样的事情会使最后一列有条件。

SELECT contacted, interviewtime, assignmetnid, round,
CASE WHEN round < 3 THEN last = 'no'
ELSE 'yes' END AS last
FROM Table