最新のレコードを取得して、NULL
一致しないものを見つけようとしています。問題は、サブクエリが複数の結果を返すことです。
データセット
| | ID | DD | SIG_ID | DCRP | -------------------------------------------- | | 1 | 2010-06-01 | 1 | エキスパート | | | 2 | 2010-09-01 | 1 | エキスパート | | | 3 | 2010-12-01 | 1 | エキスパート | | | 4 | 2010-12-01 | 1 | エキスパート II | | | 5 | 2011-03-01 | 1 | エキスパート II | | | 6 | 2011-06-01 | 1 | (ヌル) | | | 7 | 2010-06-01 | 2 | シニア | | | 8 | 2010-09-01 | 2 | シニア | | | 9 | 2010-09-01 | 2 | シニア | | | 10 | 2010-12-01 | 2 | シニアⅡ | | | 11 | 2011-03-01 | 2 | (ヌル) | | | 12 | 2011-03-01 | 2 | シニア | | | 13 | 2010-06-01 | 3 | (ヌル) | | | 14 | 2010-09-01 | 3 | (ヌル) | | | 15 | 2010-12-01 | 3 | (ヌル) |
クエリ
SELECT a.sig_id, a.id,
CASE
WHEN b.dcrp IS NULL
THEN
(SELECT dcrp
FROM tbl
WHERE sig_id = a.sig_id
AND id < a.id
AND dcrp IS NOT NULL)
ELSE b.dcrp
END AS dcrp
FROM
(SELECT sig_id, MAX(id) id
FROM tbl
GROUP BY sig_id) a
LEFT JOIN
(SELECT id, dcrp
FROM tbl
WHERE dcrp IS NOT NULL) b ON b.id = a.id
望ましい結果
dcrp
それぞれの最新のものを取得しsig_id
ます。
| | ID | DD | SIG_ID | DCRP | -------------------------------------------- | | 5 | 2011-03-01 | 1 | エキスパート II | | | 12 | 2011-03-01 | 2 | シニア | | | 15 | 2010-12-01 | 3 | (ヌル) |