比如我有一张text表,其中有个字段为qty,有个字段为time。现在按照time时间降序排序
现在需要统计:到qty这个字段合计到>=100时,所有的行。
用over累积下
http://blog.csdn.net/zengwenjie123/article/details/52896491
你用的是oracle,可以考虑创建一个function做辅助,然后通过一个sql文实现。
CREATE OR REPLACE FUNCTION FUNC_GETLASTLINE
RETURN NUMBER
IS
iTotal NUMBER:=0; -- 合計
CURSOR CUR_RST
IS
SELECT rownum AS line,
qty
FROM
( SELECT qty,TIME FROM text ORDER BY TIME DESC);
BEGIN
FOR RST IN CUR_RST
LOOP
itotal := itotal + RST.qty;
IF itotal >= 100 THEN
return rst.line;
END IF;
END LOOP;
RETURN 9999999999999999; -- 不满足条件时,根据业务设个大的数字。或者,返回text表的count+1
END;
SELECT qty, time
FROM
(SELECT rownum AS line,
qty,
time
FROM
( SELECT qty,time FROM text ORDER BY time DESC
)
)
WHERE FUNC_GETLASTLINE() <= line ;