我很难做到以下几点:
我有一个事务列表,由Sender
、Recipient
、Amount
和Date
组成。
Table: Transactions
Sender Recipient Amount Date
--------------------------------------------------
Jack Bob 52 2019-04-21 11:06:32
Bob Jack 12 2019-03-29 12:08:11
Bob Jill 50 2019-04-19 24:50:26
Jill Bob 90 2019-03-20 16:34:35
Jill Jack 81 2019-03-25 12:26:54
Bob Jenny 53 2019-04-20 09:07:02
Jack Jenny 5 2019-03-29 06:15:35
现在我要列出参与交易的人员、他们参与了多少交易以及他们参与的第一笔和最后一笔交易的日期:
Result
Person NUM_TX First_active last_active
------------------------------------------------------------------
Jack 4 2019-03-25 12:26:54 2019-04-21 11:06:32
Bob 5 xxxx-xx-xx xx:xx:xx xxxx-xx-xx xx:xx:xx
Jill 3 xxxx-xx-xx xx:xx:xx xxxx-xx-xx xx:xx:xx
Jenny 2 xxxx-xx-xx xx:xx:xx xxxx-xx-xx xx:xx:xx
使用
group by
语句似乎不对-实现我的目标的正确方法是什么?我在写博士后。 最佳答案
这是使用横向连接的好地方:
select v.person, count(*) as num_transactions,
min(t.date) as first_date,
max(t.date) as last_date
from transactions t cross join lateral
(values (sender), (recipient)) v(person)
group by v.person;
关于sql - SQL-在x或y中出现时进行分组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55794261/