週末や休日の問題に対処するために使用しようとしているカレンダーテーブルがあります。
構造は単純です。
CREATE TABLE calendar
(
daterank INT,
thedate DATE
);
アイデアは、すべてのレコードに日付ランクがあり、比較の目的で使用されるというものです。休日以外の平日は増分の daterank を持ち、週末と祝日は直前の休日以外の平日と同じ daterank を持ちます。
休日以外の平日のdaterankの設定は思ったより簡単でしたが、土日祝日の設定は思ったより複雑です。
データのサブセット:
daterank thedate
881 2013-05-21
882 2013-05-22
883 2013-05-23
884 2013-05-24
NULL 2013-05-25
NULL 2013-05-26
885 2013-05-27
886 2013-05-28
887 2013-05-29
888 2013-05-30
889 2013-05-31
NULL 2013-06-01
上記の場合、5/25 と 5/26 の NULL を 884 (5/24 の値) に、6/1 の NULL を 889 などに置き換えたいと思います。
機能しないもの:
UPDATE calendar c1
SET c1.daterank = (
SELECT MAX(c2.daterank)
FROM calendar c2
WHERE c2.thedate < c1.thedate
AND c2.daterank IS NOT NULL
)
WHERE daterank IS NULL
;
何か案は?