3

私はこのテーブルを持っています

id  fruit
---------
1   apple
2   banana <--
3   apple
4   apple
5   apple
6   apple
7   banana <----

8   apple
9   banana
10  apple

そして、2本のバナナが見つかるまで行を選択したい、のように

SELECT id FROM table_fruit UNTIL number_of_bananas = 2

したがって、結果は次のようになります1,2,3,4,5,6,7

どうすればこれを達成できますか?

ありがとう

私の質問に答えてくれた皆さんにクレジットを与えたいと思います。私はそれらすべてをテストしましたが、それらはすべて完全に機能します (期待される結果が得られました)。

Devart と ypercube の答えは少し複雑で、理解するのが難しいようです。

そして、AnandPhadke が実用的な解決策を提供した最初の人物だったので、彼の回答を受け入れたものとして選択します。

あなたたちは素晴らしいです、ありがとう!

4

5 に答える 5

3

このクエリを試してください -

SELECT id, fruit FROM (
  SELECT
    b.*, @b:=IF(b.fruit = 'banana', 1, 0) + @b AS banana_number
  FROM
    bananas b,
  (SELECT @b := 0) t
  ORDER BY id) t2
WHERE
  banana_number < 2 OR banana_number = 2 AND fruit = 'banana'

SQLFiddle デモ

于 2012-11-01T07:13:07.480 に答える
2
select * from tables where id <=

(
select id from (
select id from tables where fruit='banana'
order by id limit 2) a order by id desc limit 1
)

SQLFIDDLE デモ

于 2012-11-01T07:13:33.257 に答える
2

@Devartの答えは完璧ですが、使用できる代替オプションです。

SELECT * FROM table_fruit WHERE id <=
(
    SELECT id FROM 
    (SELECT id FROM table_fruit WHERE fruit='banana' ORDER BY id LIMIT 2) a
    ORDER BY ID DESC LIMIT 1
);

または使用してMAX

SELECT * FROM table_fruit WHERE id <=
(
    SELECT MAX(id) FROM 
    (SELECT id FROM table_fruit WHERE fruit='banana' ORDER BY id LIMIT 2) a
);

このSQLFiddleを参照してください

于 2012-11-01T07:35:12.587 に答える
1
select * from table_fruit where id <=
(
   select max(id) from
   (select id from table_fruit where fruit='banana' order by id limit 2) t
)
于 2012-11-01T07:24:32.830 に答える
0

の行が 2 つ未満の場合'banana'、テーブルのすべての行が返されます。

SELECT t.*
FROM table_fruit AS t
  JOIN
    ( SELECT MAX(id) AS id
      FROM
        ( SELECT id
          FROM table_fruit
          WHERE fruit = 'banana'
          ORDER BY id
            LIMIT 1 OFFSET 1
        ) AS lim2
    ) AS lim
    ON t.id <= lim.id
    OR lim.id IS NULL  ;
于 2012-11-01T07:38:01.513 に答える