我有这种情况:用户在网站上进行搜索,其中一些人购买了。在购买条件为真且搜索会话 = 购买会话的情况下,您将如何选择 18 岁以上进行搜索但没有进行后续购买的用户
这会选择具有搜索事件且年龄超过 18 岁的用户。
select DISTINCT ON (id) id, email, users.age, events.type, events.createdon
from users
LEFT JOIN events ON events.user = users.users
where events.type='search'
and age>18
and events.condition is true
我将如何添加他们之前在同一会话中执行搜索事件的条件?
事件的表结构:
-----------------------------------------------------
| user | event | date | condition | session |
------------------------------------------------------|
| 1 | search | 08-10-2013 | true | A |
| 1 | search | 08-10-2013 | true | A |
| 2 | search | 08-10-2013 | false | B |
| 2 | purchase | 09-10-2013 | false | A |
| 2 | search | 09-10-2013 | true | C |
| 1 | purchase | 09-10-2013 | true | A |
| 3 | search | 09-10-2013 | false | D |
| 2 | search | 10-10-2013 | true | H |
| 4 | search | 10-10-2013 | false | E |
| 4 | search | 10-10-2013 | false | E |
| 3 | search | 11-10-2013 | true | D |
| 2 | other | 11-10-2013 | true | H |
| 1 | search | 11-10-2013 | true | F |
| 1 | purchase | 12-10-2013 | true | F |
| 3 | purchase | 12-10-2013 | false | D |
| 4 | search | 12-10-2013 | true | G |
| 2 | other | 12-10-2013 | true | A |
-----------------------------------------------------
用户表是:
------------------------
| user | email | age |
------------------------
| 1 | a | 22 |
| 2 | b | 34 |
| 3 | c | 15 |
| 4 | d | 44 |
| 5 | e | 39 |
------------------------
结果应该是 2 和 4:
1 a -> NO because did purchase with condition=true
2 b -> YES because did search, did purchase BUT condition=false
3 c -> NO because did search, did purchase with condition=false BUT age<18
4 d -> YES because did search and no purchase
谢谢,我刚从 Mongo 开始使用 Postgres,而且好多了!
更新:例如更正的结果