码迷,mamicode.com
首页 > 数据库 > 详细

SQL 查询最新套餐用户

时间:2018-07-22 13:02:43      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:内容   方便   com   维度   解决   不一致   部分   img   命名   

问题需求:

在数据库中,以时间为维度查询出移动客户最新开通的套餐。

技术分享图片

 

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

思路:

查询出号码对应最新的更改套餐的时间,然后在通过条件匹配查询出该用户最新的套餐。

 

 

第一步:

查询出用户最新一次更改套餐的时间,查询以用户作为分组,选出时间最新的(最大)的时间。

select msisdn , MAX(time) from b GROUP BY msisdn

技术分享图片

 

第二步:

以此作为条件来匹配原始表B中的数据,通过左连接或者右连接来匹配查询。

select a.msisdn ,  a.time , b.tariff_packages from B                                --查询a.表中的用户,a.表中的时间,b表中的套餐
RIGHT JOIN                                                                                            --右连接查询
(select msisdn , MAX(time) as time from b GROUP BY msisdn) a         --将刚刚查询到的结果命名为表a
on (B.msisdn = a.msisdn and B.time = a.time)                                        --匹配条件是两个表的用户和时间都能匹配上的结果才输出

注意:在连接查询中需要注明被查询的字段是来自哪一张表的,不然会出现查询时候的报错,报错内容是XXX字段不知来源那张表 ,只需要标明清楚即可解决。

输出的结果:

技术分享图片

 

 

用户135002当前最新在使用的套餐是B

用户135001当前最新在使用的套餐是A

用户135003当前最新在使用的套餐是C

 

备注:原表中的部分数据并不是按照时间顺序进行插入的,在实际应用中,可能存在某一天的数据丢失过几天才补上的情况,

所以会出现部分数据的时间插入的先后顺序不一致的情况,但是并不会查询的效果。

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

 

附1:表结构以及注释

表B

字段                           类型           注释

msisdn                       int              用户号码

time                           int              时间(方便计算 用int类型作为比较)

tariff_packages         varchar      修改后的套餐类型

 

附2:插入语句代码

insert into b (msisdn , time , tariff_packages) VALUES (135001,20180101,‘A‘);
insert into b (msisdn , time , tariff_packages) VALUES (135002,20180123,‘C‘);
insert into b (msisdn , time , tariff_packages) VALUES (135003,20180123,‘A‘);
insert into b (msisdn , time , tariff_packages) VALUES (135001,20180317,‘C‘);
insert into b (msisdn , time , tariff_packages) VALUES (135002,20180415,‘B‘);
insert into b (msisdn , time , tariff_packages) VALUES (135003,20180418,‘B‘);
insert into b (msisdn , time , tariff_packages) VALUES (135002,20180419,‘B‘);
insert into b (msisdn , time , tariff_packages) VALUES (135001,20180518,‘B‘);
insert into b (msisdn , time , tariff_packages) VALUES (135003,20180619,‘C‘);
insert into b (msisdn , time , tariff_packages) VALUES (135003,20180711,‘C‘);
insert into b (msisdn , time , tariff_packages) VALUES (135001,20180712,‘A‘);
insert into b (msisdn , time , tariff_packages) VALUES (135003,20180718,‘B‘);
insert into b (msisdn , time , tariff_packages) VALUES (135002,20180102,‘C‘);
insert into b (msisdn , time , tariff_packages) VALUES (135003,20180801,‘C‘);
insert into b (msisdn , time , tariff_packages) VALUES (135003,20180730,‘A‘);

SQL 查询最新套餐用户

标签:内容   方便   com   维度   解决   不一致   部分   img   命名   

原文地址:https://www.cnblogs.com/qinfangzhe/p/9349567.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!