MySQL:求每个用户第一单和最近一单的消费金额

题目

现在数据库中有一张用户交易表order,其中有userid(用户ID)、amount(消费金额)、paytime(支付时间),请写出对应的SQL语句,查出每个用户第一单和最近一单的消费时间和金额。

题解

测试表如下:MySQL:求每个用户第一单和最近一单的消费金额_第1张图片

思路:先找到每个用户第一单消费时间,再用联结找到第一单消费金额;同理可知每个用户最近一单的消费时间和金额;再用联结汇总即可。
1.先找到每个用户第一单消费时间,再用联结找到第一单消费金额

select a.userid,t2.min,a.amount 
from 
(select userid,min(Paytime)as min  #第一单时间是最小的时间
from ceshi
GROUP BY userid)t2 
left outer join ceshi as a on t2.userid=a.userid and t2.min=a.Paytime

2.找到每个用户最近一单消费时间,再用联结找到最近一单消费金额

select a.userid,t1.max,a.amount
from 
(select userid,max(Paytime)as max #最近一单的时间是最大的时间
from ceshi
GROUP BY userid)t1 
left outer join ceshi as a on t1.userid=a.userid and t1.max=a.Paytime

3.把上面两个结果利用userid联结汇总

select t11.userid,
       t11.max as '最近时间',
       t11.amount as '最近金额',
       t22.min as '最早时间',
       t22.amount as '最早金额'
from 
(select a.userid,t1.max,a.amount
from 
(select userid,max(Paytime)as max
from ceshi
GROUP BY userid)t1 left outer join ceshi as a on t1.userid=a.userid and t1.max=a.Paytime)t11,
(select a.userid,t2.min,a.amount 
from 
(select userid,min(Paytime)as min
from ceshi
GROUP BY userid)t2 left outer join ceshi as a on t2.userid=a.userid and t2.min=a.Paytime)t22
where t11.userid=t22.userid

查询结果如下
MySQL:求每个用户第一单和最近一单的消费金额_第2张图片

你可能感兴趣的:(SQL,mysql,sql)