我正在调整我的一个应用程序中的脚本,但遇到了障碍。我有一个例程,基本上列出了所有候选人的面试并打印他们正在处理的职位空缺的面试轮次。这是数据库中的一个示例表。
+---------+-------------------+------------+
|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 中工作,但我必须执行 2 个额外的查询才能获取输出,这使我的执行时间增加了 1.5~ 秒。我想知道是否可以让 MySQL 来完成繁重的工作,并希望能缩短这个时间。我确信随着表的增长,我当前的实现将成为瓶颈。
编辑[2016-10-31]
我正在使用此查询添加计算行数的窗口函数,但我对拼图的最后一 block 有问题,也就是说这是否是最后(最大)一轮。
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 函数。
最佳答案
我不太确定您现在使用哪两个查询来运行。 但是像这样使最后一列成为有条件的怎么样呢?
SELECT contacted, interviewtime, assignmetnid, round,
CASE WHEN round < 3 THEN last = 'no'
ELSE 'yes' END AS last
FROM Table
关于php - MySQL 组增量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38640220/