我有一个查询,它从一些“位置”表中检查访问。如果用户使用“ emp”或“ oth”的引荐进行了注册,则不应计入其首次访问,但应计入第二次访问和转发。
我正在尝试计算每个位置的“首次访问”次数。每当他们去拜访时,我都会得到一个记录,记录在哪个位置。
问题是我的查询计数正确,但是某些用户访问了不同的位置。因此,不只是计算该位置的访问次数(第一个),而是在用户访问过的每个位置添加一个访问次数。
这是我的查询
SELECT COUNT(DISTINCT CASE WHEN customer.ref IN ('emp','oth') THEN customer.id END) as visit_count,locations.name as location FROM locations
LEFT JOIN visits ON locations.location_name = visits.location_visit_name
LEFT JOIN customer ON customer.id = visits.customer_id
WHERE locations.active = true
GROUP BY locations.location_name,locations.id;
我得到的结果是
visit_count | locations
-------------------------
7 | Loc 1
3 | Loc 2
1 | Loc 3
应该如何:
visit_count | locations
-------------------------
6 | Loc 1
2 | Loc 2
1 | Loc 3
因为这些人中有2人在这两个地点都有访问,所以每个地点都算一次。我认为DISTINCT
也在位置上做到这一点,只应在customer.id
是否可以在查询中添加一些内容,以便仅获取第一次访问的位置,而无需关心他们是否在其他位置进行了其他访问?