surveys
次のようなテーブルがあるとします。
顧客 | last_survey_result | 日付 (整数)
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
私はそれが奇妙だと思うし、何が起こっているのか見当もつかない. インデックスに関連するものでしょうか?私は完全に迷っています。