我很难构建一个能够完成相对简单的任务的查询。
我有一张桌子可以叫data
。此表有一个date
列和一个将条目指定为daily
数据或monthly
数据的列。
我想检索所有daily
记录,以及记录,其中没有月份记录。示例:如果存在每日记录monthly
,那么我不想在2016-01-10
上检索月记录
我觉得下面的查询应该可以实现这个目标,但是我不明白为什么它返回了太多的行(重复),并且当重复数据消除时,没有返回所需的集。
SELECT daily.*
FROM data daily
LEFT JOIN data monthly
ON date_trunc('month', daily.date) != date_trunc('month', monthly.date)
AND monthly.interval='monthly'
WHERE daily.interval='daily'
AND monthly.interval='monthly'
预期行为是返回左侧的所有记录、每日数据,并在不返回与任何每日记录具有相同月份的每月记录的条件下加入。
最佳答案
select *
from data d
where
interval = 'daily'
or
interval = 'monthly'
and
not exists (
select 1 from data
where
date_trunc('month', d.date) = date_trunc('month', date)
and interval = 'daily'
)
关于sql - 在同一张 table 上简单的左联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38240748/