在x或y中出现时进行分组

在x或y中出现时进行分组

我很难做到以下几点:
我有一个事务列表,由SenderRecipientAmountDate组成。

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/

10-14 12:48