需求背景
在一个这样的业务中,需要查询一个表A的记录,其中A表的主要字段有 id , createtime ,amount ,现在要求给定一个数字N,查询按照创建时间顺序排列之后的前 x条记录,这x条记录需要满足sum(amount)>=N并且尽可能的小的条件。其中传入的参数只有N。在这种情况下,笔者第一个想到的方案就是在sql中使用变量来记录这个sum(amount)的值来达到目的。其中sql如下:
SET @sum =0;
SET @flag =0;
SELECT *
FROM (
SELECT
(CASE WHEN @sum < 100 THEN @sum := @sum + restpoints ELSE @sum := @sum +
restpoints END) AS sum,
(CASE WHEN @sum <100 THEN @flag :=0 ELSE @flag := @flag + 1 END) AS flag,
(CASE WHEN @flag < 2 THEN id ELSE NULL END) AS xxid,
(CASE WHEN @flag < 2 THEN restpoints ELSE NULL END) AS xxrestpoints,
t.*
FROM (select * from A) a
order by date(useexpiretime) asc,restpoints desc
)t
)AS TMP
WHERE TMP.xxid IS NOT NULL