今天对过去一前辈写的项目进行查询优化,要对一个子查询进行优化,感觉效率提升了不少!在此记录。场景如下:
表字段: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在范围内的最大值记录数。