在列==0的最后一行之后选择列>0的行

n8ghc7c1  于 2021-08-09  发布在  Java
关注(0)|答案(4)|浏览(279)

编辑2021:我想更好地解释这一点。
我有一张table叫 MyTable 有两列;一列名为 SortColumn 类型 Integer 和一列名为 ExpressionColumn 类型 Boolean . 我想得到所有的行,按 SortColumn 按升序,在最后一行之后 ExpressionColumnTrue .
类型不准确。
例如,表中的行表示为 [SortColumn,ExpressionColumn] , [0:True] 会得到 [0:True] , [0:True, 1:False] 会得到 [] , [0:True, 1:False, 2:True, 3:True] 会得到 [3:True, 4:True] .
保留下面的老问题,以免使给出的答案无效。它有太多额外的细节。
我想选择后面的行,而不是最后一行的where列 Number 是0。
所以有了这张table,

Id | Number
------------
0  | 5
1  | 30
2  | 10
3  | 25

我想和你吵架 Id 0到3(含)。
有了这张table,

Id | Number
------------
0  | 5
1  | 30
2  | 10
3  | 25
4  | 0

我不想吵架。
有了这张table,

Id | Number
------------
0  | 5
1  | 30
2  | 10
3  | 25
4  | 0
5  | 0  
6  | 30

我想和你吵架 Id 6.
sql详细信息:MySQL5.6。

7qhs6swi

7qhs6swi1#

检索单独的记录:

SELECT * 
FROM transaction t1
WHERE Name LIKE '%Car Wash%'
  AND NOT EXISTS ( SELECT NULL
                   FROM transaction
                   WHERE t1.id <= id
                     AND Name LIKE '%Car Wash%' -- maybe not needed? not specified
                     AND Price = 0 );

仅检索其金额:

SELECT COUNT(*)
FROM transaction t1
WHERE Name LIKE '%Car Wash%'
  AND NOT EXISTS ( SELECT NULL
                   FROM transaction
                   WHERE t1.id <= id
                     AND Name LIKE '%Car Wash%'
                     AND Price = 0 );

小提琴

oxcyiej7

oxcyiej72#

您可以选择

select 
    from my_table 
    where name like '%car%' and price > 0

数一数

select count(*)
    from (
       select 
       from my_table 
       where name like '%car%' and price > 0
    ) t
daupos2t

daupos2t3#

我把这个问题解释为“在第一行价格>0的后面有多少行可以洗车”。如果是:

select count(*)
from (select t.*,
             min(case when price = 0 then id end) over () as id_at_0
      from transaction t 
     ) t
where name = 'Car Wash' and id > id_at_0
ss2ws0br

ss2ws0br4#

SELECT * FROM MyTable myTable1
  AND NOT EXISTS ( SELECT NULL FROM MyTable
                   WHERE myTable1.SortColumn <= SortColumn
                     AND ExpressionColumn = True );

相关问题