weixin_34695266
weixin_34695266
采纳率0%
2017-01-24 17:08 阅读 1.4k

oralce查询某个字段合计到某个值时的所有行

50

比如我有一张text表,其中有个字段为qty,有个字段为time。现在按照time时间降序排序
现在需要统计:到qty这个字段合计到>=100时,所有的行。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • caozhy 从今以后生命中的每一秒都属于我爱的人 2017-01-24 17:14
    点赞 1 评论 复制链接分享
  • engchina engchina 2017-01-25 07:43

    你用的是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 ; 
    
    点赞 评论 复制链接分享

相关推荐