我正在使用oracle developer编写代码来查看是否有连续3天的设备登录,我正在使用case函数编写代码,但它给出了无效关系运算符错误。我不知道我错在哪里。
提前感谢
SELECT *FROM
(SELECT a.*,substr(TEXT_USERNAME,2,length(TEXT_USERNAME)-2), row_number()
over (partition by trunc(DTIME_LOGIN) order by TEXT_USERNAME ) rn
FROM
OWNER_DWH.F_HOSEL_USER_LOGIN_TT a)
WHERE
(CASE WHEN trunc(dtime_login)=trunc(sysdate-1) then 'y'
ELSE 'n' END ) D1
and
(CASE WHEN trunc(dtime_login)=trunc(sysdate-2) then 'y'
ELSE 'n' END) D2
and
(CASE WHEN trunc(dtime_login)=trunc(sysdate-3) then 'y'
ELSE 'n' END) D3发布于 2017-05-25 19:20:03
这修复了您的语法错误。但是代码不会返回任何行,因为您的逻辑是错误的:
WHERE 'y' = (CASE WHEN trunc(dtime_login) = trunc(sysdate-1) then 'y' ELSE 'n' END) AND
'y' = (CASE WHEN trunc(dtime_login) = trunc(sysdate-2) then 'y' ELSE 'n' END) AND
'y' = (CASE WHEN trunc(dtime_login) = trunc(sysdate-3) then 'y' ELSE 'n' END)我建议你用样本数据和期望的结果问另一个问题,并清楚地解释你想要完成什么。
发布于 2017-05-25 22:36:10
当你写一个查询时,你是在问一个关于数据的问题。谓词或where子句是用于限制要返回的行的特定问题。这..。
(CASE WHEN trunc(dtime_login)=trunc(sysdate-1) then 'y'
ELSE 'n' END ) D1..。实际上是一个有效的谓词。在这里,您正在运行一个CASE语句内容,该语句内容将返回值,但是该值永远不会与常量或其他值进行比较。相反,您似乎正在尝试分配一个别名,该别名仅用于select列。
也许您正在考虑下面这样的事情。在这里,对CASE语句求值,并根据值'y‘测试结果值。
(CASE WHEN trunc(dtime_login)=trunc(sysdate-1) then 'y'
ELSE 'n' END ) = 'y'https://stackoverflow.com/questions/44179234
复制相似问题