用SQL完成多记录乱序查找最大值

本文分享了一次针对数据库查询效率的优化经验。通过合理利用GROUP BY和窗口函数,解决了多线程插入导致的数据乱序问题,有效提升了特定条件下记录计数的查询速度。

今天对过去一前辈写的项目进行查询优化,要对一个子查询进行优化,感觉效率提升了不少!在此记录。场景如下:

表字段:NAME    DATE      STATUS

因此表的数据是多线程插入的,所以会出现NAME的乱序,即是:若三种NAME为a,b,c,则表的存储可能会像如下序列:

a  a   a  c   c    b   c   a   c   c   b   b  ...但是其中又包含各类NAME集合的DATE列,要找到满足DATE 在 当前时间和当前时间-10分钟间最大的DATE,并且对应此列的STATUS字段是1时的记录总数。


描述为:

∀x ∈ S,S={x| x.date<time()∧ x.date>time()-10min ∧ x.STATUS=1}

(呃,描述好费劲啊!)

最后使用了GROUP子句,将NAME字段分组:

SELECT
      <span style="color:red;">DISTINCT COUNT(MAX(DATE)) OVER() AS ROW</span>
        FROM TB
        WHERE DATE BETWEEN DATEADD(MM,-10,GETDATE()) 
        AND GETDATE()
             GROUP BY NAME
这样就查找出了所有的NAME种类中DATE在范围内的最大值记录数。

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值