問題:ここCOALESCE関数は
CREATE TABLE Score(`id` int, `col1` INT NULL);
INSERT INTO Score
(`id`, `col1`)
VALUES
(2, NULL),
(3, 10),
(5, -1),
(7, NULL),
(11, NULL),
(13, -12),
(17, NULL),
(19, NULL),
(23, 1759);
http://sqlmag.com/t-sql/last-non-null-puzzleを発見し、ID順に基づいてテーブルから最後の非NULL値を見つけることです
所望の出力:SQLFiddleで
id col1 lastval
----------- ----------- -----------
2 NULL NULL
3 10 10
5 -1 -1
7 NULL -1
11 NULL -1
13 -12 -12
17 NULL -12
19 NULL -12
23 1759 1759
マイコードMySQL 5.6
SELECT s1.id, COALESCE(s2.col1)
FROM score s1 JOIN score s2
ON s1.id >= s2.id
GROUP BY s1.id
ORDER BY s1.id, s2.id DESC
私が理解しているように、最初の非NULL値はリスト。しかし、それはすべての列に(null)
を与えています。 COALESCE
が動作しない理由を指摘できますか? また、COALESCE
を削除すると、GROUP BY
句がs2.col1
列の最初の値を返すという質問にも答える必要があります。私はここで間違っているかもしれない。
私はSQLでユーザ定義の変数に慣れていません。しかし、私は解決策を見つけました。これが動作するかどうかを確認できますか?'SELECT s1.id、(SELECT s2.col1 FROM score s2 WHERE s2.id <= s1.id およびs2.col1はNULLではありません ORDER BY s2.id DESC LIMIT 1) AS値 スコアから1 ORDER BY s1.id' –
2番目のクエリは、MySQLのユーザー変数を使用して説明してください。 –