数据库查询语句相关

数据库查询语句相关

数据库有一张表,里面有很多数据

00002525  张三    1998-05-17    1

00002525  张三    2022-05-16    0

00002526  李四    2022-05-16    0

00002527  王五    2022-05-16    0

00002528  王六    2022-05-16    0


比如有效期是一年,1为过期,0为有效

我想查询返回日期最新一条数据的状态

SELECT max(statr_time)as id, hy_num,agre_status FROM cust_agre WHERE hy_num='00002525' GROUP BY hy_num



但是不知道为什么,这个语句返回的日期是最新的,但是状态却不是0,而是1

我只要一条最新的数据的状态,可能用户有多条这个数据



正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
时间, 2022-05-17 15:19:08

同学,你好!参考代码:

select a.hy_num,a.name,a.statr_time,a.agre_status from cust_agre a join 
(select hy_num,max(statr_time) id from cust_agre group by hy_num) b 
on a.hy_num=b.hy_num and a.statr_time=b.id and a.agre_status=1

表数据:

https://img1.sycdn.imooc.com//climg/62834c1109d3364a04020188.jpg

执行结果:

https://img1.sycdn.imooc.com//climg/62834c39099b57a603680100.jpg

祝学习愉快!

  • 提问者 易动互推 #1

    不是这个意思,举个例子:会员管理系统

    一个会员表

    一个协议表

    一个会员可能对应着很多份协议,协议有效期是一年,过期了是1,有效是0

    当查询会员表的时候,表连接协议表,获取该会员最新一份协议以及协议状态。

    我遇到的问题是,通过会员表连接

    SELECT max(statr_time)as id, hy_num,agre_status FROM cust_agre WHERE hy_num='00002525' GROUP BY hy_num

    比如说

    协议表数据

    00002525 张三  2022-05-17  0     今天录入的有效协议

    00002525 张三  1996-02-21  1     早些年的协议,1为过期协议

    00002526 张四  2022-05-17  0 

    00002527 张五  2022-05-17  0 


    会员表

    00002525 张三  

    00002526 张四 

    00002527 张五  


    表连接后查询

    我希望返回的结果是

    00002525 张三   2022-05-17    0

    00002526 张四   2022-05-17    0

    00002527 张五   2022-05-17    0


    但是实际上通过上面这个语句返回的结果

    00002525 张三   2022-05-17    1

    00002526 张四   2022-05-17    0

    00002527 张五   2022-05-17    0


    日期是最新的,但是协议状态却是早期的1,而不是最新录入对应日期的0


    2022-05-17 15:27:33
  • 时间, 回复 提问者 易动互推 #2

    同学,你好!

    1、同学提供的sql语句只是查询了cust_agre文件中的数据,并没有实现表链接。同学可以在sql语句中加上查询协议状态为0的条件

    表中的数据:

    https://img1.sycdn.imooc.com//climg/6283535b09b72a8705900254.jpg

    根据同学提供的数据,使用下面的sql语句是可以实现的

    select c.hy_num,c.name,d.statr_time,d.agre_status from cust c join
    (select a.hy_num,a.statr_time,a.agre_status from cust_agre a join 
      (select hy_num,max(statr_time) id from cust_agre group by hy_num) b 
    on a.hy_num=b.hy_num and a.statr_time=b.id and a.agre_status=0) d
    on c.hy_num=d.hy_num


    https://img1.sycdn.imooc.com//climg/628353a309caddfe03730132.jpg


    祝学习愉快!

    2022-05-17 15:51:26
  • 提问者 易动互推 回复 时间, #3

    SELECT a.Id,a.start_time,a.hy_num,c.hy_name,a.detail_status,b.member_name,d.agre_status as agreid ,e.work_fullname,a.detail_desc  FROM `cust_detail` as a LEFT JOIN sys_membe as b on a.hy_status=b.Id LEFT JOIN cust_user as c on a.hy_num=c.hy_num LEFT JOIN (select f.hy_num,f.statr_time,f.agre_status from cust_agre f left join (select hy_num,max(statr_time) id from cust_agre group by hy_num) g on f.hy_num=g.hy_num and f.statr_time=g.id) as d on a.hy_num=d.hy_num LEFT JOIN user_work as e on c.hy_work=e.work_username where a.start_time>='2022-05-01' and a.start_time<='2022-05-31' and a.hy_num like '%%' and c.hy_name like '%%' ORDER BY start_time




    https://img1.sycdn.imooc.com//climg/62846a4609080c1a12580666.jpg



    会出现重复数据



    条件查询后,会发现,0和1都显示了

    https://img1.sycdn.imooc.com//climg/62846aa7096d975616570442.jpg

    2022-05-18 11:40:35
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师