В моей таблице прогнозов хранится текущая неделя, а затем прогнозируемые суммы на 26 недель вперед:
CREATE TABLE forecast_listings (
product integer NOT NULL
, current_week_date date
, weekplus0 integer NOT NULL DEFAULT 0
, weekplus1 integer NOT NULL DEFAULT 0
, weekplus2 integer NOT NULL DEFAULT 0
, weekplus3 integer NOT NULL DEFAULT 0
, weekplus4 integer NOT NULL DEFAULT 0
-- etc
, weekplus24 integer NOT NULL DEFAULT 0
, weekplus25 integer NOT NULL DEFAULT 0
);
Например, прогнозируя один элемент, я выбираю одну строку с самыми последними current_week_date
, а затем смотрю на относительные недели.
SELECT
unnest(
array[
to_char(week_current_date, 'YYYY-MM-DD'),
to_char(week_current_date + interval '1 weeks', 'YYYY-MM-DD'),
to_char(week_current_date + interval '2 weeks', 'YYYY-MM-DD'),
to_char(week_current_date + interval '3 weeks', 'YYYY-MM-DD'),
to_char(week_current_date + interval '4 weeks', 'YYYY-MM-DD')
-- ...all the way to 25
]
) AS "Week",
unnest(
array[
weekplus0,
weekplus1,
weekplus2,
weekplus3,
weekplus4
-- ...all the way to 25
]
) AS "Count"
FROM (
SELECT * FROM forecast_listings
WHERE product_id = 1
ORDER BY week_current_date DESC
LIMIT 1
) as row
Я хотел бы сделать это с помощью Postgres, по существу извлекая строку и перенося номер каждой недели в строку со столбцом даты и столбцом количества:
week, count
2017-10-01,100
2017-10-08,200
2017-10-15,150
etc.
asin
,valid_as_of
(вы имеете в видуcurrent_week_date
?) иweekcurrent
(weekplus0
?) не входят в определение вашей таблицы. А что за месяц в названии? Я помог и заменил список столбцов операторомCREATE TABLE
, с которым мы можем работать. И некоторые исправления синтаксиса. Укажите несколько примеров значений и свою версию Postgres. Я почти уверен, что есть элегантное решение... - person Erwin Brandstetter   schedule 05.10.2017