我有一个日历表,我正试图用它来处理一些周末和假期问题。
结构很简单:
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
在上述情况下,我想要的是用 884(5/24 的值)替换 5/25 和 5/26 的 NULL,用 889 替换 6/1 的 NULL,等等。
什么不起作用:
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
;
有任何想法吗?