Полагаю, вам нужна таблица с датой измерения за 10 лет со всеми столбцами, представленными на рисунке 2.4 (на основе Google Книги ). Проверка в документации:
Чтобы получить все дни в течение 10 лет, вы можете написать:
SELECT generate_series('2001-01-01'::date, '2010-12-31'::date, '1 day') AS day;
SELECT count(*) FROM generate_series('2001-01-01'::date, '2010-12-31'::date, '1 day');
count
-------
3652
(1 row)
В соответствии с рисунком 2.5 создайте таблицу как, например ::1010 *
DROP TABLE IF EXISTS "Date Dimension";
CREATE TABLE "Date Dimension"
(
"Date Key" serial,
"Date" date,
"Full Day Description" text,
"Day Of Week" text,
"Calendar Month" text,
"Calendar Year" integer,
"Fiscal Year Month" text,
"Holiday Indicator" text,
"Weekday Indicator" text
);
Вставить команду:
INSERT INTO "Date Dimension"
("Date", "Full Day Description", "Day Of Week", "Calendar Month",
"Calendar Year", "Fiscal Year Month", "Holiday Indicator",
"Weekday Indicator")
SELECT
day,
rtrim(to_char(day, 'Month')) || to_char(day, ' DD, YYYY'),
to_char(day, 'Day'),
rtrim(to_char(day, 'Month')),
date_part('year', day),
'F' || to_char(day, 'YYYY-MM'),
'', --omitting (trivial 'Holiday'/'Non-Holiday, but how to get this ??),
CASE
WHEN date_part('isodow', day) IN (6, 7) THEN 'Weekend'
ELSE 'Weekday'
END
FROM
generate_series('2001-01-01'::date, '2010-12-31'::date, '1 day') day;
Надеюсь, это даст вам некоторые рамки и отправную точку.