如何只选择满足条件的第一个元素?

时间:2015-04-30 08:57:09

标签: mysql sql while-loop ansi-sql

我有下表(简化真正的问题):

+----+-------+
| id | value |
+----+-------+
|  1 | T     |
|  2 | T     |
|  3 | F     |
|  4 | T     |
+----+-------+

现在一个简单的SELECT id FROM Table WHERE value='T';会得到值为T的所有ID,但在上面的示例中,我只需要前两个(1和2)。

最好的方法是什么?我不想使用while循环。

我将它标记为MySQL,但是适用于大多数数据库引擎的解决方案会更好。

编辑:根据答案,我可能不够清楚:
我只想要第一个ID值是' T'。这可以是从无值到所有值的任何值。

编辑2:另一个例子:

+----+-------+
| id | value |
+----+-------+
|  1 | F     |
|  2 | T     |
|  5 | T     |
|  6 | F     |
|  7 | T     |
|  9 | T     |
+----+-------+

结果将是[]。

示例3:

+----+-------+
| id | value |
+----+-------+
|  1 | T     |
|  2 | T     |
|  5 | T     |
|  6 | F     |
|  7 | T     |
|  9 | T     |
+----+-------+

结果:[1,2,5]

5 个答案:

答案 0 :(得分:1)

你是在追求像这样简单的事情吗?只是限制结果?

select id from table where value = 'T' order by id asc limit 2

如果由于某种原因你想要最后两场比赛而不是前两场比赛,只需将订单更改为desc而不是asc

我看到标准发生了一些变化。

select id
  from `table` t
    where t.id >= (select @min := min(id) from `table` t2 where value = 'T') 
      and not exists (select id from `table` t3 where value = 'F' and id > @min and id < t.id)
   and value = 'T'

demo here

如果你想在第一个值为'F'时没有结果,那么这个:

select id
  from `table` t
    where 
       not exists (select id from `table` t3 where value = 'F' and id < t.id)
   and value = 'T'

答案 1 :(得分:1)

如果ID自动递增,则可以使用order by limit

select * from table_name where value = 'T' order by id limit 2

答案 2 :(得分:0)

尝试LIMIT 2,如下所示

SELECT id 
FROM Table 
WHERE value='T'
ORDER BY id
LIMIT 2

答案 3 :(得分:0)

如果您不需要数据中的任何订单或排序

  SELECT id FROM Table WHERE value='T' limit 0,2

如果您想按ID排序,可能需要添加'ORDER BY'。 e.g。

SELECT id FROM Table WHERE value='T' order by id limit 0,2

答案 4 :(得分:0)

您可以获得第一次出现的&#39; F&#39;然后在条件下使用。
你可以这样做:

SELECT id FROM tables where id < (select AVG(id) FROM tables WHERE value = 'F' ORDER BY id LIMIT 1)