如何在 SQL (Vertica) 中完成两周 date_trunk?

How to make two weeks date_trunk in SQL (Vertica)?

我需要以两周为间隔将每个时间戳转换为其 date_trunk。比如说,与 date_trunk('week', event_time) 相同,但它会是 date_trunk('2 weeks', event_time)。所以我有一个时间戳列,它的两周 date_trunk 列如下。

我尝试使用 date_trunc('week', event_time) + '1 week'::intervaldate_trunc('week', event_time) +7,但它只是偏离了我的 event_date。

有人知道怎么解决吗?

您可以使用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)

此答案假设 ISO 第 1 周和第 2 周应映射到第 2 周第 1 周,第 3 周和第 4 周映射到第 2 周第 2 周等。我们可以在这里尝试使用 floor 和除法:

SELECT
    event_time,
    FLOOR((WEEK(event_time) + 1) / 2) AS two_week
FROM yourTable;

所以我的最终代码实际上是(在@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

在日期/时间尝试我最喜欢的 Vertica 特定功能之一:TIME_SLICE() .

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

最大的单位是小时,但是你可以把它相乘....