用户3年内不同级别违法次数 -- SQL面试题

在这里插入图片描述
思路:
三年内应该是指用户取得驾照后的3年内,不同年份不同违法次数的分布。
第一步,按用户分组,违法时间降序排列;
第二步,违法表与用户信息表关联
第三步,计算违法时间与取证时间之间的差值
第四步,筛选出时间差小于等于3年的,分组后,计数

/*
insert into `用户表`
VALUES
(10023,'2015-04-21');

insert into `违法表`
VALUES
(10023,'一级','2017-04-21 14:20:20'),
(10023,'二级','2016-04-21 14:20:20'),
(10023,'二级','2017-06-21 14:20:20'),
(10023,'三级','2018-06-21 14:20:20');
*/
 SELECT id,year,`违法级别`, diff,count(diff) from(
SELECT * ,TIMESTAMPDIFF(YEAR,`领证时间`,date(`违法时间`)) as diff,year(`违法时间`) as year FROM
(SELECT * from `违法表` ) a
LEFT JOIN 
(SELECT id as id1, `领证时间` from `用户表` ) b
ON a.id = b.id1
) c
where diff <4
GROUP BY id,year ,`违法级别`
ORDER BY id,year ,`违法级别`

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天山下小花家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值