使用SUM( Amount ) OVER ( ORDER BY "DATE" DESC ) 分析函数获取累计总数,然后您只需过滤累计总数小于 500 的行并找到最大的行:
Oracle 设置:
CREATE TABLE table_name ( "DATE", Bill_No, Amount ) AS
SELECT DATE '2019-07-24' + INTERVAL '12:00:00' HOUR TO SECOND, '43565', 20 FROM DUAL UNION ALL
SELECT DATE '2019-07-24' + INTERVAL '18:00:00' HOUR TO SECOND, '12354', 100 FROM DUAL UNION ALL
SELECT DATE '2019-07-22' + INTERVAL '13:20:02' HOUR TO SECOND, '12782', 120 FROM DUAL UNION ALL
SELECT DATE '2019-07-22' + INTERVAL '15:30:23' HOUR TO SECOND, '99807', 200 FROM DUAL UNION ALL
SELECT DATE '2019-07-21' + INTERVAL '20:00:23' HOUR TO SECOND, '23686', 50 FROM DUAL UNION ALL
SELECT DATE '2019-07-21' + INTERVAL '11:34:45' HOUR TO SECOND, '38965', 10 FROM DUAL UNION ALL
SELECT DATE '2019-07-21' + INTERVAL '10:05:30' HOUR TO SECOND, '04578', 45 FROM DUAL UNION ALL
SELECT DATE '2019-07-20' + INTERVAL '19:30:00' HOUR TO SECOND, '34950', 38 FROM DUAL UNION ALL
SELECT DATE '2019-07-20' + INTERVAL '14:25:00' HOUR TO SECOND, '54954', 25 FROM DUAL
查询:
SELECT *
FROM (
SELECT *
FROM (
SELECT t.*,
SUM( Amount ) OVER ( ORDER BY "DATE" DESC ) AS total
FROM table_name t
)
WHERE total <= 500
OR ROWNUM = 1 -- Make sure at least one row is returned.
ORDER BY total DESC
)
WHERE ROWNUM = 1
输出:
日期 | BILL_NO |数量 |全部的
:----------------- | :-------- | -----: | ----:
2019-07-21 11:34:45 | 38965 | 10 | 500
db小提琴here