我想创建两个时间戳之间的日期范围。我看到类似的帖子,也检查了这个方法。然而,仍然无法达到下面的预期输出。
请注意,如果ended_at为NULL,则CURRENT_TIMESTAMP需要取。
示例数据:
WITH t1 AS (
SELECT 'A' AS id, '2021-05-18 18:30:00'::timestamp AS started_at, '2021-05-19 09:45:00'::timestamp AS ended_at UNION ALL
SELECT 'B' AS id, '2021-05-24 11:30:40'::timestamp AS started_at, NULL::timestamp AS ended_at
)
SELECT *
FROM t1
Run Code Online (Sandbox Code Playgroud)
预期结果:
sql date time-series date-range snowflake-cloud-data-platform
MATCH_RECOGNIZE我在带有一些 CTE 的查询中使用函数。当我运行查询时,出现以下错误:
SQL 编译错误:在此上下文中不支持 MATCH_RECOGNIZE。
在我的查询中,MATCH_RECOGNIZE 之前和之后有几个 CTE,部分如下。
WITH cte1 AS (
SELECT *
FROM dataset
WHERE ID IS NOT NULL AND STATUS IS NOT NULL ),
cte2 AS (
SELECT *
FROM cte1
QUALIFY FIRST_VALUE(STATUS) OVER (PARTITION BY ID ORDER BY CREATED_AT) = 'created' )
mr as (
SELECT *
FROM cte2
MATCH_RECOGNIZE (
PARTITION BY ID
ORDER BY CREATED_AT
MEASURES MATCH_NUMBER() AS mn,
MATCH_SEQUENCE_NUMBER AS msn
ALL ROWS PER MATCH
PATTERN (c+m+)
DEFINE
c AS status='created' …Run Code Online (Sandbox Code Playgroud) sql common-table-expression sql-view snowflake-cloud-data-platform match-recognize