使用时间函数写需求_SQL记录

交易表结构为user_id(用户ID),order_id(订单ID),pay_time(付款时间),order_amount(金额)

  1. 写sql查询过去一个月付款用户量(提示:用户量需去重)最高的三天分别是哪几天?

  2. 写sql查询昨天每个用户最后付款的订单ID及金额

思路:求最高的三天,肯定是先排序,后limit. 先求出每天的付款用户量,既然每天,那肯定要按天分组了;按照题目要求过滤条件有:1.过去一个月 2.付款用户(即要排除未付款的用户),另外求用户量需要去重,题目中也有提示,因为存在同一个用户每天有多笔消费记录的情况;返回排在前三的付款用户量及对应的时间(天)
-- 1
select
date_format(pay_time,"%Y-%m-%d") days,
count(distinct user_id)
from table
where pay_time=date_sub(now(),interval 1 month)
group by date_format(pay_time,"Y%-%m-%d")
order by count(distinct user_id) desc
limit 3;
-- 2
select
a.user_id,a.order_amount
from
(
select
user_id,order_amount,
row_number() over(partition by user_id order by pay_time desc) as rank
from table
where date_format(pay_time,"%Y-%m-%d")=date_sub(curdate(),interval 1 day) as a
)
where rank=1;

用户登录日志表为user_id,log_id,session_id,visit_time

用sql查询近30天每天平均登录用户数量

select
avg(numUser) as averageUsers
from
(
select
date_format(visit_time,"%Y-%m-%d") as visit_date,
count(distinct user_id) as numUser
from table
where
date_diff(curdate(),visit_date)<=30
group by visit_date
);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值