Преобразовать целочисленный столбец в месяц типа MM - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь использовать PRECEDING и FOLLOWING в дальнем месяце со следующим кодом

WITH tmp1 AS (
SELECT location.city,  date.date, COUNT(*) OVER W 
FROM fact, crime, date, location 
WHERE fact.location_key = location.location_key and crime.crime_key = 
fact.crime_key and fact.date_key = date.date_key
WINDOW W AS (
            PARTITION BY location.city, date.year
            ORDER BY date.month
            RANGE BETWEEN INTERVAL '1 month' PRECEDING
            AND INTERVAL '1 month' FOLLOWING
        ))

Я получил сообщение об ошибке:

RANGE with offset PRECEDING/FOLLOWING is not supported for column type integer and offset type interval

Я предполагаю, что это потому, что мой date.month имеет тип integer

Поэтому я попытался преобразовать свой столбец date.month в формат даты типа MM

Я попытался выполнить следующие действия:

ALTER TABLE date ALTER COLUMN month TYPE text 
 using to_date(month, 'MM');

и выдает ошибку

 No function matches the given name and argument types. You might need to add explicit type casts.

Мой вопрос

Как преобразовать date.month в тип, который можно использовать с командами PROCEDING и FOLLOWING?

Я предполагаю, что этот тип date с форматом MM. Вот почему я попробовал приведенный выше код

Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Вам не нужно преобразовывать столбец month в любой другой тип данных. Оконное предложение, т. Е. rows between..., в вашем случае работает с данным разделом, равным PARTITION BY location.city, date.year. Вам нужно добавить month в раздел сначала, чтобы он работал в предложении window. Также не используйте старый стиль соединения.

WITH tmp1 AS (
SELECT location.city,  date.date, COUNT(*) OVER W 
FROM fact
join crime
on crime.crime_key = fact.crime_key
join date
on fact.date_key = date.date_key 
join location 
on fact.location_key = location.location_key and 
WINDOW W AS (
            PARTITION BY location.city, date.year, date.month
            ORDER BY date.month
            RANGE BETWEEN 1 PRECEDING
            AND 1 FOLLOWING
        ))
0 голосов
/ 14 марта 2020

Зачем вам использовать интервал, когда вы можете использовать целочисленный диапазон?

WINDOW W AS (
        PARTITION BY location.city, date.year
        ORDER BY date.month
        RANGE BETWEEN INTERVAL 1 PRECEDING AND
                      INTERVAL 1 FOLLOWING
       )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...