我试图在配置单元中用case语句编写一个查询,其中条件取决于当前行中的一个值(不管它是否等于它的前一个值)。我想用这种方式动态地计算它,因此需要一个嵌套查询,而不是先让它成为另一列,然后比较两列(我能做到后者,但那真的是第二好)。有人知道怎么做吗?谢谢。
我的问题:
SELECT * ,
CASE
WHEN
(SELECT lag(field_with_duplicates,1) over (order by field_with_duplicates) FROM my_table b
WHERE b.id=a.id) = a.field_with_duplicates
THEN “Duplicate”
ELSE “”
END as Duplicate_Indicator
FROM my_table a
错误:
java.sql.sqlexception:org.apache.spark.sql.analysisexception:无法识别表达式规范中“select”“lag”“(”附近的输入;4号线位置9
注意事项:
我之所以需要复杂的'lag'函数,是因为表中的唯一id不是连续的,但我不认为它是在哪里:我通过替换另一个更简单的内部查询进行测试,得到了相同的错误消息。
说到“重复”,我在发布之前确实搜索过这个问题,但我找到的唯一select的inside case是在then语句中,如果这是一样的话,它建议我的也应该可以。
2条答案
按热度按时间00jrzges1#
感谢@matbailie在他的评论中给出了答案。我不觉得傻。。。
断然的
wfypjpf42#
您不需要在case中使用子查询:
或者甚至可以在case中使用lag(),而不使用子查询(我不确定它是否适用于所有配置单元版本):