У меня есть таблица календаря, которую я пытаюсь использовать для решения некоторых выходных и праздничных вопросов.Запись UPDATE с подзапросом в собственный стол
Структура проста:
CREATE TABLE calendar
(
daterank INT,
thedate DATE
);
Идея заключается в том, что каждая запись имеет 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
То, что я хочу, в приведенном выше случае, заменить NULLs для 5/25 и 5/26 с 884 (значение для 5/24), нулевая для 6/1 с 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
;
Есть идеи?
Так у вас есть календарь стол для решения проблем отдыха, и вы не укажете, является ли дата праздником? Как странно. –