2016-09-01 2 views
1

У меня есть следующие таблицы в MySQL:моего 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 
    |   |   | 
    |   |   | 
    |   |   | 
    +   +   + 

я хочу, чтобы выбрать, кто имеет file1, и на основе этого я проверить состояние, если есть выключенное состояние я выбрать телефон номер, если нет никакого состояния, я выбираю первого, у которого есть файл1 в таблице.

В следующий раз, когда выполняется запрос sql, выполняется тот же процесс, и если его не было, он возвращает следующий номер телефона, у которого есть файл1, но не предыдущий. Как я могу это сделать? спасибо.

+2

иногда пример более понятен, чем тысячи слов – fedorqui

+3

И.Э. добавьте ожидаемый результат. (Почему тег MS SQL Server?) – jarlh

+0

ok да. спасибо – 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

Ваше заявление должно выглядеть что-то вроде

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; 

Для рабочего примера в PostgresSQL:

\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 ;