mysql 查询当前最新时间内数据,并分组排序,一个团队花了一周找出最好sql

方案一:缺点数据多了之后 查询速度慢,功能可以实现。 以下是 单表数据,自己可以更改分组排序

select E.ID,E.SID,E.GID,E.CID,E.ZID,E.P1,E.PHASE,E.STATE,E.TIMES FROM cws_data E WHERE(E.TIMES = (SELECT MAX(TIMES) FROM cws_data WHERE day(TIMES) =day( now())
and month(TIMES) =month( now()) and year(TIMES)=year(now()) and SID = E.SID and GID=E.GID and CID=E.CID and ZID=E.ZID and PHASE=E.PHASE ))
and E.SID=777777
group by E.GID,E.CID,E.ZID,E.PHASE

select E.ID,E.SID,E.GID,E.CID,E.ZID,E.P1,E.PHASE,E.STATE,E.TIMES FROM 表名 E WHERE(时间字段 = (SELECT MAX(时间字段) FROM 表名 WHERE day(时间字段) =day( now())
and month(时间字段) =month( now()) and year(时间字段)=year(now()) and SID = E.SID and GID=E.GID and CID=E.CID and ZID=E.ZID and PHASE=E.PHASE ))
and E.SID=777777
group by E.GID,E.CID,E.ZID,E.PHASE

**===================================================**
方案二:做法前无仅有,查询速度快。 以下是 单表数据,团队多方案测试,这个方法查询速度最快,后面的分组自己可以更改分组排序

select A.ID,A.SID,A.GID ,A.CID,A.ZID,A.P1 P1,A.PHASE PHASE,A.STATE STATE,A.TIMES from (select * from cws_data where to_days(TIMES) = to_days(now()) ) A
WHERE A.SID=777777 AND NOT EXISTS(
SELECT * FROM (select * from cws_data
where to_days(TIMES) = to_days(now()) ) B
WHERE B.GID=A.GID and B.CID=A.CID and B.ZID=A.ZID and B.PHASE=A.PHASE AND B.TIMES>A.TIMES )group by A.GID,A.CID,A.ZID,A.PHASE
ORDER BY A.GID,A.CID,A.ZID,A.PHASE ASC

=====================================================

select A.ID,A.SID,A.GID ,A.CID,A.ZID,A.P1 P1,A.PHASE PHASE,A.STATE STATE,A.TIMES from (select * from cws_data where to_days(时间字段) = to_days(now()) ) A
WHERE A.SID=777777 AND NOT EXISTS(
SELECT * FROM (select * from 表名
where to_days(时间字段) = to_days(now()) ) B
WHERE B.GID=A.GID and B.CID=A.CID and B.ZID=A.ZID and B.PHASE=A.PHASE AND B.TIMES>A.TIMES )group by A.GID,A.CID,A.ZID,A.PHASE
ORDER BY A.GID,A.CID,A.ZID,A.PHASE ASC

=====另有两套方案不写出来了,以上够用。全网没有可查当前最新时间内数据,如果有更好的方案请在评论区写上sql,谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值