直近、直近の1つ前、そのまた1つ前…
これで1つ前の日付を求めることはできるようになりました。ですが実務では、
この要望に応えるため、
cur_date latest_1 latest_2 latest_3 -------- -------- -------- -------- 08-02-01 08-02-02 08-02-01 08-02-05 08-02-02 08-02-01 08-02-07 08-02-05 08-02-02 08-02-01 08-02-08 08-02-07 08-02-05 08-02-02 08-02-12 08-02-08 08-02-07 08-02-05
まずはOLAP関数を使うならば、
SELECT sample_date AS cur_date,
MIN(sample_date)
OVER (ORDER BY sample_date ASC
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS latest_1,
MIN(sample_date)
OVER (ORDER BY sample_date ASC
ROWS BETWEEN 2 PRECEDING AND 2 PRECEDING) AS latest_2,
MIN(sample_date)
OVER (ORDER BY sample_date ASC
ROWS BETWEEN 3 PRECEDING AND 3 PRECEDING) AS latest_3
FROM LoadSample;
BETWEENによる行の指定先を
一方、
答えはリスト8のようになります。
SELECT LS0.sample_date AS sample_date,
MAX(LS1.sample_date) AS latest_1,
MAX(LS2.sample_date) AS latest_2,
MAX(LS3.sample_date) AS latest_3
FROM LoadSample LS0
LEFT OUTER JOIN LoadSample LS1
ON LS1.sample_date < LS0.sample_date
LEFT OUTER JOIN LoadSample LS2
ON LS2.sample_date < LS1.sample_date
LEFT OUTER JOIN LoadSample LS3
ON LS3.sample_date < LS2.sample_date
GROUP BY LS0.sample_date;
クエリの中に使いたいだけ集合を追加できるのが集合指向という考え方の柔軟なところです
S0が
そうしたら、
SELECT MIN(sample_date)
OVER (ORDER BY sample_date ASC
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS past,
sample_date AS cur_date,
MAX(sample_date)
OVER (ORDER BY sample_date DESC
ROWS BETWEEN 1 PRECEDING AND 1 PRECEDING) AS future
FROM LoadSample;
SELECT MAX(LS1.sample_date) AS past,
LS.sample_date AS sample_date,
MIN(LS2.sample_date) AS future
FROM LoadSample LS
LEFT OUTER JOIN LoadSample LS1
ON LS1.sample_date < LS.sample_date
LEFT OUTER JOIN LoadSample LS2
ON LS2.sample_date > LS.sample_date
GROUP BY LS.sample_date;
past cur_date future -------- -------- -------- 08-02-01 08-02-02 08-02-01 08-02-02 08-02-05 08-02-02 08-02-05 08-02-07 08-02-05 08-02-07 08-02-08 08-02-07 08-02-08 08-02-12 08-02-08 08-02-12
OLAP版、

2月5日の前後の日付を求めるということは、
このように、
さて、