mysql题目小练(一)

题目描述:
交易表结构为 user_id,order_id,pay_time,order_amount

  1. 写 sql 查询过去一个月付款用户量(提示 用户量需去重)最高的 3 天分别是哪
    几天;
  2. 写 sql 查询昨天每个用户最后付款的订单 ID 及金额;

题目解答:

1.

select
a.dt_pay_time
from
#to_date()函数作用:文本转日期
(select
to_date(pay_time) as dt_pay_time,
count(distinct user_id) as pay_cnt
from table
where to_date(pay_time) between date_sub(current_date,31)
and date_sub(current_date,1)
group by to_date(pay_time)) a
order by a.pay_cnt desc
limit 3

2.关于函数row_number() over()的用法参见:
https://blog.csdn.net/qq_35246620/article/details/56290903

select
a.order_id,
a.order_amount
from
(select
user_id,
pay_time,
order_id,
order_amount,
row_number() over(patition by user_id order by pay_time desc) as rank
from table
where to_date(pay_time)=date_sub(current_date,1) a
where a.rank=1

猜你喜欢

转载自blog.csdn.net/qq_33186949/article/details/79780928