首页 > 试题广场 >

title1

[编程题]title1
  • 热度指数:26 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

表结构说明

  • user_recharge表
字段 说明
id 自增主键
userid 用户id
user_name 用户名
recharge 充值金额
ts 充值时间
CREATE TABLE IF NOT EXISTS user_recharge (
  id INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
  userid int(10) NOT NULL,
  user_name varchar(50)  NOT NULL ,
  recharge decimal(30, 4) NOT NULL DEFAULT '0',
  ts datetime,
  PRIMARY KEY (id));
有用户充值表(用户id,  用户名,充值金额,充值时间),查询每个用户充值次数最多的单笔金额,并统计该金额对应的充值次数及最近一次充值时间
(如果单笔金额对应的充值次数相同,则取时间最近的记录所对应的充值金额)。

返回值举例:
用户id | 用户名 |  充值金额 | 充值次数 | 最近一次充值时间
1|张三|100|2|2019-01-01 15:00:00
2|李四|200|1|2019-01-01 14:00:00



输入描述:


输出描述:
$demo
示例1

输入

输出

SELECT userid,
    user_name,
    recharge,
    rec_counts,
    ts
FROM (
    SELECT userid,
        user_name,
        recharge,
        rec_counts,
        ts,
        rank() over(partition by userid order by rec_counts DESC, ts DESC) ranking
    FROM (
        SELECT userid,
            user_name,
            recharge,
            count(1) over(partition by userid, recharge) rec_counts,
            ts
        FROM `user_recharge`
        ) p1
    ) p2
WHERE ranking = 1

发表于 2020-02-04 22:05:39 回复(0)