SQL:计算最后一个相等的值

时间:2019-05-30 15:59:54

标签: sql oracle

我需要用纯SQL解决此问题: 我必须计算具有特定值的所有记录: 在我的表中,有一个列标记,其值为0或1。我需要对最后0之后的所有1进行计数,并对这些记录的列总数求和。

示例:

Flag | Amount

0    | 5
1    | 8
0    | 10
1    | 20
1    | 30

输出:

2    | 50

如果最后一个值为0,则无需执行任何操作。 我赶紧进行一下快速查询(可能只访问一次)。

3 个答案:

答案 0 :(得分:1)

我假设您的示例表在逻辑上按金额排序。然后,您可以执行以下操作:

select
     count(*) as cnt
    ,sum(Amount) as Amount
from yourTable
where Amount > (select max(Amount) from yourTable where Flag = 0)

如果最大值来自行where Flag = 0,则不会返回任何内容。

答案 1 :(得分:0)

如果您的表中可能不包含任何零,那么使用以下方法会更安全:

select count(*) as cnt, sum(Amount) as Amount
from t
where Amount > all (select Amount from t where Flag = 0)

或者,使用窗口功能:

select count(*) as cnt, sum(amount) as amount
from (select t.*, max(case when flag = 0 then amount end) as flag0_amount
      from t
     ) t
where flag0_amount is null or amount > flag0_amount 

答案 2 :(得分:0)

我自己找到解决方案:

   _isButtonTapped = false

   Widget _buildButton(String key, Text title, String url) {
    _onTapped() async {
      if (await canLaunch(url)) {
        launch(url).whenComplete(
          () => setState(() {
                _isButtonTapped = false;
              }),
        );
      }
    }

    return GestureDetector(
      onTap: () {
        _isButtonTapped ? null : _onTapped();
        setState(() {
          _isButtonTapped = true;
        });
      },
      child: Container(
        child: Padding(
          padding: EdgeInsets.all(6.0),
          child: Center(child: title),
        ),
      ),
    );
  }