我有以下测试用例,运行良好:
WITH t1 AS (
SELECT 1 as id
UNION ALL
SELECT NULL
UNION ALL
SELECT 2
)
Select
*,
case when id is null then "null" when id = 1 then "test" end
from
t1
在我的实际查询中,我有一个日期差异函数:
DATE_DIFF(second_date,first_date, DAY) as time_lag,
在尝试应用以下case语句时:
case when time_lag is null then "null" when time_lag = "1" then "test" end
我有一个错误:
No matching signature for operator = for argument types: STRUCT<client_ID STRING, Total INT64, first_date DATE, ...>, STRING. Supported signatures: ANY = ANY at [79:49]
据我所知,diff语句返回的日期 INT64
以及一些空值,因为并非所有行都包含日期。我不明白我的测试用例和我的真实用例有什么不同。我真正的用例有什么问题。。。
2条答案
按热度按时间cu6pst1q1#
你应该试试
正如你所说,时间差是int64,所以问题出在
... when time_lag = "1" then ...
ubof19bj2#
关于我的评论,您将时间延迟视为数据库表中的一列,我猜,它不是。它是从两列中计算出来的值。因此,您有两个选择-要么使用执行date\u diff操作的子查询,然后将其别名为time\u lag。或者在case表达式中直接使用计算。