如何解决查询今天尚未完成调查的用户并收到错误
我有一个正在使用的功能,我需要我的PostgreSQL数据库来返回今天尚未完成调查的所有用户。
select distinct *
from users
left join survey_results
on users.user_id = survey_results.user_id
where customer_id = '9000'
and survey_results.created_at < (DATE_PART('year',survey_results.created_at) = (SELECT EXTRACT(YEAR FROM CURRENT_TIMESTAMP))
AND DATE_PART('month',survey_results.created_at) = (SELECT EXTRACT(MONTH FROM CURRENT_TIMESTAMP))
AND DATE_PART('day',survey_results.created_at) = (SELECT EXTRACT(DAY FROM CURRENT_TIMESTAMP)))
我正在使用左联接来联接我的调查结果表,并按customer_id进行过滤,并且survey_results.created在
我在运行查询而不是结果时收到此输出。
ERROR: operator does not exist: timestamp with time zone < boolean
LINE 6: and survey_results.created_at < (DATE_PART('year',survey_re...
^
HINT: No operator matches the given name and argument type(s). You might need to add explicit type casts.
SQL state: 42883
Character: 155
解决方法
与其使用datepart,不如将其与current_date进行比较-
select distinct *
from users
left join survey_results
on users.user_id = survey_results.user_id
where customer_id = '9000'
and survey_results.created_at < CURRENT_DATE
如果您的survey_results.created_at列为时间戳,请使用日期函数将其转换为日期,然后将其与current_date进行比较-
select distinct *
from users
left join survey_results
on users.user_id = survey_results.user_id
where customer_id = '9000'
and DATE(survey_results.created_at) < CURRENT_DATE
,
使用NOT EXISTS
和today()
代替CURRENT_TIMESTAMP
:
SELECT *
FROM users
WHERE NOT EXISTS (
SELECT
FROM survey_results
WHERE users.user_id = survey_results.user_id
AND survey_results.created_at < today()
)
AND customer_id = '9000'
返回所有在今天之前 未完成调查的人。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。