Как сделать две недели date_trunk в SQL (Vertica)? - PullRequest
1 голос
/ 28 октября 2019

Мне нужно повернуть каждую метку времени к ее date_trunk с интервалом в две недели. Скажем, так же, как date_trunk('week', event_time), но это будет date_trunk('2 weeks', event_time). Таким образом, у меня будет столбец отметки времени и двухнедельный столбец date_trunk, как показано ниже.

Я попытался перейти с date_trunc('week', event_time) + '1 week'::interval или date_trunc('week', event_time) +7, но он просто смещает дату моего события_

Кто-нибудь знает, как это исправить?

Ответы [ 4 ]

1 голос
/ 28 октября 2019

В этом ответе предполагается, что неделя № 1 и № 2 ИСО должны отображаться на 2-недельную № 1, недели 3 и 4 - на 2-недельную № 2 и т. Д. Мы можем попробовать использовать слово этаж и деление здесь:

SELECT
    event_time,
    FLOOR((WEEK(event_time) + 1) / 2) AS two_week
FROM yourTable;
0 голосов
/ 28 октября 2019

Попробуйте одну из моих любимых функций Vertica по дате / времени: TIME_SLICE().

SELECT
  dt
, TIME_SLICE(dt,24*7*2,'HOUR') AS hebdo
FROM dt;

Самая большая единица измерения - это час, но вы можете умножить его ....

0 голосов
/ 28 октября 2019

Итак, мой окончательный код (с помощью @Tim Biegeleisen):

select distinct 
            event_date 
          , min(event_date) over (partition by two_week) as two_week
        from (
            select distinct 
                event_time::date as event_date
                , FLOOR(week((DATE_TRUNC('week', event_time) - 1)) / 2) AS two_week
            from MyTable
0 голосов
/ 28 октября 2019

Вы можете использовать case выражение:

select (case when mod(week(event_time), 1)
             then date_trunc('week', event_time)
             else date_trunc('week', event_time) - interval '1 week'
        end)
...