SQL 查询最新套餐用户
问题需求:
在数据库中,以时间为维度查询出移动客户最新开通的套餐。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
思路:
查询出号码对应最新的更改套餐的时间,然后在通过条件匹配查询出该用户最新的套餐。
第一步:
查询出用户最新一次更改套餐的时间,查询以用户作为分组,选出时间最新的(最大)的时间。
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');
转载于:https://www.cnblogs.com/qinfangzhe/p/9349567.html
SQL 查询最新套餐用户相关推荐
- sql查询最新时间的一条数据
先查询最大的时间: select max(time) from table 再把根据查询的时间作为添加条件查询表格 select * from table where time = (select m ...
- oracle判断字段为空时选用别的字段_oracle中使用sql查询时字段为空则赋值默认
转至:http://www.th7.cn/db/Oracle/201501/86125.shtml oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 oracle 函数介绍之nvl ...
- SQL Server 2005查询处理结构-用户模式计划(UMS)
SQL Server 2005查询处理结构-用户模式计划(UMS) 在对数据库进行性能调优时,必须全面的考虑各种可能造成系统性能瓶颈的各种因素,因此深入了解SQL Server 2005的查询处理机构 ...
- 请用SQL查询:昨天所有用户的签到和签退时间
考勤签到表的数据结构如下,表名:hrmschedulesign ID userid signdate signtime clientaddress 1 A01 2019-06-17 08:32:40 ...
- 中国移动5G最新规划:今年5G套餐用户突破1亿 | 附PPT
5月17日,中国移动举办5G生态合作伙伴大会,中国移动副总经理简勤公布了目前中国移动的5G建设进展:截至目前,中国移动已建成5G基站12.4万个,覆盖56个城市,发展5G套餐客户突破5000万,成为全 ...
- sql查询重复数据获取最新的一条,使用条件解决方案
sql查询重复数据获取最新的一条,使用条件解决方案. 把最新的一条记录当成条件查询. select * from tableA a where a.id = (SELECT id FROMtableA ...
- SQL查询从多个表返回数据
本文翻译自:SQL query return data from multiple tables I would like to know the following: 我想知道以下内容: how t ...
- sql查询,nolock写还是不写,这是一个问题
在做过的很多项目中,发现大家不管对什么表,逢select必定加上nolock(或者with(nolock)),好像已经是制度化的一种东西.有领导高人解释说加上nolock可以提高查询速度,不影响对数据 ...
- 计算机目录读取,从项目目录中读取SQL查询文件(Read SQL query file from project directory)...
从项目目录中读取SQL查询文件(Read SQL query file from project directory) 我在Visual Studio项目中放置了3个特别大的SQL查询,位于项目目录中 ...
最新文章
- esp ghost引导_ghost做uefi+gpt 需要什么cmd命令修复引导
- python monkey_解决python调用monkeyrunner的各种各样问题
- python数据分析类库_python数据分析类库系列-Pandas入门之数据结构Series
- tomcat:Could not publish to the server. java.lang.IndexOutOfBoundsException
- 【python】Macbook M1/M1pro/M1max 安装anaconda记录
- hdu 1231最大连续子序列 动态规划
- Q 语言 -- 赋值表达式
- 一分钟入门typescript
- 类似qvod的流媒体点播服务器架设建议
- 鸿蒙无锡有什么特产,无锡太湖鼋头渚十大特产
- uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程
- kubectl 命令详解(三十三):rollout resume
- 什么是云计算?(IaaSPaaS,SaaS区别)
- 归一化互相关(NCC)及其部分应用场景
- HarmonyOS实战—可编辑的卡片交互
- android 观察者模式的简单demo,一个简单的demo彻底搞懂观察者模式
- plasma桌面特效无效的解决办法
- 【读点论文】FaceNet: A Unified Embedding for Face Recognition and Clustering 人脸向量映射到一个特定空间后成为一种集成系统
- STC 纯硬件自动下载电路 V2
- 指纹识别软件:EHole(棱洞)使用记录