2016-09-01 4 views
1

私は、MySQLに次の表がある場合:私はFILE1を持っている、と私は携帯電話を選択し、オフ状態がある場合、私は、状態を確認することに基づいて人を選択します私のSQL文

 +   +   + 
id | state | phone | files 
+------------------------------------+ 
1 | on  | 123123 | file1 
2 | on  | 124423 | file2 
3 | off  | 123455 | file1 
4 | off  | 128455 | file3 
5 | on  | 323132 | file3 
6 | off  | 124454 | file4 
    |   |   | 
    |   |   | 
    |   |   | 
    +   +   + 

をnumberはオフ状態がない場合、最初にfile1を持つ人を選択します。

次回、SQLクエリが実行され、同じプロセスが実行され、オフ状態がない場合は、前の人ではなくファイル1の次の電話番号が返されます。これどうやってするの?ありがとう。

+2

時々の例では、千個の言葉 – fedorqui

+3

すなわち、より理解しやすいです期待される結果を追加する。 (なぜMS SQL Serverタグですか?) – jarlh

+0

はい。おかげで – pouya

答えて

0
SELECT t.id 
    , t.state 
    , t.phone 
    , t.file 
    FROM mytable t 
WHERE t.file = 'file1' 
ORDER BY t.file, t.state, t.id 
LIMIT 1 
+0

ありがとう。 。 – pouya

0

あなたの声明べきではPostgresSQLの中に働い例えば

select phone from mytable 
where file = 'file1' 
    and state = 'on' 
    and id > :last_id /* you'll need to provide the previously popped id as a variable */ 
order by id asc 
limit 1; 

次のようになります。

\set last_id 0 
select phone from (values 
    (1, 'on', 123123, 'file1'), 
    (2, 'on', 124423, 'file2'), 
    (3, 'off', 123455, 'file1'), 
    (4, 'off', 128455, 'file3'), 
    (5, 'on', 323132, 'file3'), 
    (6, 'off', 124454, 'file4') 
) x (id, state, phone, file) 
where file = 'file1' 
    and state = 'on' 
    and id > :last_id 
order by id asc 
limit 1 ;