我有一张桌子,里面有人和其他人。只有当这是第一次访问时,我才需要计算当月的访问次数。因此,基本上要统计当月的访问次数,但前提是你当月的访问是第一次。
示例:
PEOPLE:
id
---------
20
30
23
VISITS
id | date
-------------------------
20 | 09-20-2019
20 | 10-01-2019
23 | 10-09-2019
30 | 10-07-2019
我只想知道如果是第一次计数,在这个例子中,计数应该等于2,因为ID为20的人上个月有过一次访问。
这是我到目前为止在我的查询上看到的
SELECT * FROM visits
LEFT JOIN people ON visits.id = people.id
WHERE date_trunc('month', current_date) <= visits.visit_date AND visits.visit_date < date_trunc('month', current_date) + INTERVAL '1 month'
这只是给我一个月的访问量。如果对方没有过去的访问,我怎么能筛选。
您可以通过比较月份来简化条件。添加not exists
以检查此人在本月之前是否有就诊。
select *
from visits
left join people on visits.id = people.id
where date_trunc('month', current_date) = date_trunc('month', visits.visit_date)
and not exists (
select from visits
where id = people.id
and date_trunc('month', current_date) > date_trunc('month', visits.visit_date)
)
根据我对您需求的理解,您只需要获得上次访问的人员ID。
我的建议是在date_trunc('month', visit_date)
的基础上使用dense_rank()
select v.id from visits v
inner join
(select dense_rank() over (partition by date_trunc('month', visit_date) order by visit_date) as rn
, *
from visits) t1 on t1.id = v.id
group by v.id, t1.rn
having count(v.id) > 1