2016-12-22 19 views
1

Существует таблица status, которая содержит данные, как показано ниже:Andorid-дб запрос для получения последних записей или первой группы, если последняя запись является дубликатом предыдущего

Id Status  TimeStamp 
------------------------- 
1 StatusC  1234561 
2 StatusC  1234562 
3 StatusB  1234563 
4 StatusA  1234564 
5 StatusA  1234565 
6 StatusA  1234566 

Что запрос возвращает следующий результат ?

Id Status  TimeStamp 
------------------------- 
4 StatusA  1234564 

Другой пример:

Id Status  TimeStamp 
------------------------- 
1 StatusC  1234561 
2 StatusC  1234562 
3 StatusB  1234563 
4 StatusA  1234564 
5 StatusA  1234565 
6 StatusB  1234566 

Результат:

Id Status  TimeStamp 
------------------------- 
6 StatusB  1234566 

Так я хочу последнюю запись состояния, если она отличается от предыдущей, или если предыдущий последней такой же статус, то первой из этой группы. Я пробовал пару, но я не получаю нужный результат. Есть ли эффективные способы достижения результата?

+0

является идентификатор столбца последовательным без пробелов? –

+0

@vkp да, они есть – coder1087

ответ

1

Вы хотите самые ранние (самое низкую временную метка) записи (строки) с же статусом в качестве последней строки (высокой временной метки), но это не имеет еще одну строки после этого с различным статусом.

попробовать это:

Select * 
from table p 
where p.Timestamp = 
    (Select min(TimeStamp) from table x 
     where status = 
      (Select Status from table 
      Where timestamp = 
       (Select Max(timestamp) From table)) 
      and not exists 
       (Select * from table 
        Where timestamp > x.timeStamp 
         and status != p.Status)) 

 Смежные вопросы

  • Нет связанных вопросов^_^