问题需求:

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

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

思路:

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

第一步:

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

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 查询最新套餐用户相关推荐

  1. sql查询最新时间的一条数据

    先查询最大的时间: select max(time) from table 再把根据查询的时间作为添加条件查询表格 select * from table where time = (select m ...

  2. oracle判断字段为空时选用别的字段_oracle中使用sql查询时字段为空则赋值默认

    转至:http://www.th7.cn/db/Oracle/201501/86125.shtml oracle 通过 nvl( )函数sql 查询时为 空值 赋默认值 oracle 函数介绍之nvl ...

  3. SQL Server 2005查询处理结构-用户模式计划(UMS)

    SQL Server 2005查询处理结构-用户模式计划(UMS) 在对数据库进行性能调优时,必须全面的考虑各种可能造成系统性能瓶颈的各种因素,因此深入了解SQL Server 2005的查询处理机构 ...

  4. 请用SQL查询:昨天所有用户的签到和签退时间

    考勤签到表的数据结构如下,表名:hrmschedulesign ID userid signdate signtime clientaddress 1 A01 2019-06-17 08:32:40 ...

  5. 中国移动5G最新规划:今年5G套餐用户突破1亿 | 附PPT

    5月17日,中国移动举办5G生态合作伙伴大会,中国移动副总经理简勤公布了目前中国移动的5G建设进展:截至目前,中国移动已建成5G基站12.4万个,覆盖56个城市,发展5G套餐客户突破5000万,成为全 ...

  6. sql查询重复数据获取最新的一条,使用条件解决方案

    sql查询重复数据获取最新的一条,使用条件解决方案. 把最新的一条记录当成条件查询. select * from tableA a where a.id = (SELECT id FROMtableA ...

  7. SQL查询从多个表返回数据

    本文翻译自:SQL query return data from multiple tables I would like to know the following: 我想知道以下内容: how t ...

  8. sql查询,nolock写还是不写,这是一个问题

    在做过的很多项目中,发现大家不管对什么表,逢select必定加上nolock(或者with(nolock)),好像已经是制度化的一种东西.有领导高人解释说加上nolock可以提高查询速度,不影响对数据 ...

  9. 计算机目录读取,从项目目录中读取SQL查询文件(Read SQL query file from project directory)...

    从项目目录中读取SQL查询文件(Read SQL query file from project directory) 我在Visual Studio项目中放置了3个特别大的SQL查询,位于项目目录中 ...

最新文章

  1. esp ghost引导_ghost做uefi+gpt 需要什么cmd命令修复引导
  2. python monkey_解决python调用monkeyrunner的各种各样问题
  3. python数据分析类库_python数据分析类库系列-Pandas入门之数据结构Series
  4. tomcat:Could not publish to the server. java.lang.IndexOutOfBoundsException
  5. 【python】Macbook M1/M1pro/M1max 安装anaconda记录
  6. hdu 1231最大连续子序列 动态规划
  7. Q 语言 -- 赋值表达式
  8. 一分钟入门typescript
  9. 类似qvod的流媒体点播服务器架设建议
  10. 鸿蒙无锡有什么特产,无锡太湖鼋头渚十大特产
  11. uni-app跨平台开发app,用Hbuilderx打包安卓应用程序到上架google play 完成l流程
  12. kubectl 命令详解(三十三):rollout resume
  13. 什么是云计算?(IaaSPaaS,SaaS区别)
  14. 归一化互相关(NCC)及其部分应用场景
  15. HarmonyOS实战—可编辑的卡片交互
  16. android 观察者模式的简单demo,一个简单的demo彻底搞懂观察者模式
  17. plasma桌面特效无效的解决办法
  18. 【读点论文】FaceNet: A Unified Embedding for Face Recognition and Clustering 人脸向量映射到一个特定空间后成为一种集成系统
  19. STC 纯硬件自动下载电路 V2
  20. 指纹识别软件:EHole(棱洞)使用记录

热门文章

  1. 亲影,回忆不褪色,精彩永留存
  2. 帆软FineBI大数据Spider引擎——为海量数据分析而生
  3. 基于GIS的房产中介管理系统 c# arcgis arcengine 可用于毕设研究
  4. bim推荐计算机配置,BIM设计师电脑岂能儿戏?做BIM设计电脑配置推荐
  5. java -xmx_java默认的Xmx大小 | 学步园
  6. Verdaccio-Basic
  7. 遍历 HashMap 的 5 种最佳方式
  8. 10款性能测试工具供参考
  9. 如何让自己的平面设计水平从零基础到精通
  10. N皇后问题(递归回溯)