假设我有一个surveys
这样的表:
客户 | 上次调查结果 | 日期(整数)
CREATE TABLE `surveys` (
`id` int(11) NOT NULL AUTO_INCREMENT ,
`customer` int(11) NULL DEFAULT NULL ,
`survey_result` tinyint(4) NOT NULL DEFAULT '-1' ,
`date` smallint(2) NOT NULL ,
PRIMARY KEY (`id`),
INDEX `optimize` USING BTREE (`customer`, `survey_result`, `date`)
)
ENGINE=InnoDB
ROW_FORMAT=COMPACT
;
每个客户都可以进行多次评论。如果他没有完成它,last_survey_result=-1
.
我想知道每个客户的最后评价是什么,以及不是-1
。如果他从未回答过任何问题,则结果为默认值-1
。
例如,如果我们有这个
customer | survey_result | date (int)
a | -1 | 1
a | 7 | 2
b | -1 | 1
b | -1 | 2
c | 10 | 1
c | 8 | 2
d | -1 | 1
d | 7 | 2
结果必须是:
customer | last_survey_result
a | 7
b | -1
c | 8
d | 7
这是我尝试过的。事实上,它适用于这些数据:
SELECT a.customer, a.survey_result last_survey_result
FROM surveys a
LEFT OUTER JOIN surveys b
ON a.customer=b.customer AND (a.date < b.date AND b.survey_result>=0)
WHERE b.customer IS NULL
GROUP BY customer;
问题出在示例中,我得到了很好的结果,但是在我的数据库中,这会发生:
customer | survey_result | date (int)
a | -1 | 1
a | 5 | 2
a | -1 | 3
b | -1 | 1
b | 8 | 2
b | -1 | 3
customer | last_survey_result
a | -1
b | 8
我认为这很奇怪,不知道会发生什么。它可能与索引有关吗?我完全迷路了。