如何在 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'::interval
或 date_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;
最大的单位是小时,但是你可以把它相乘....
我需要以两周为间隔将每个时间戳转换为其 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
,但它只是偏离了我的 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;
最大的单位是小时,但是你可以把它相乘....