2014-03-22 2 views
0

я получил следующее содержимое таблицы:Выберите Top 1 строку для отчетливого ид SQLite

> id text  time 
>  1  Hi   2 
>  2  Hello  1 
>  1  Mr. SP  3 
>  3  KK   1 
>  2  TT   2 
>  1  Sample  1 
>  1  App   4 

и мне нужно, чтобы выбрать различные значения для идентификатора с текстом, следовательно, вывод должен быть:

id  text  time 
1  App  4 
2  TT  2 
3  KK  1 

Может кто-нибудь помогите мне с этим запросом.

Я использую SQLite

Благодаря

ответ

1
select b.* 
from 
(
select id, max(time) as time 
from yourtable 
group by id) a inner join yourtable b on a.time = b.time and a.id = b.id 

работает демо: http://sqlfiddle.com/#!5/fbb87/5

+0

Спасибо @Milen! Вы можете помочь мне по этому запросу: http://stackoverflow.com/questions/22577230/select-top-1-for-distinct-value-according-to-time – Tejas

0
select * from (
select id,[text], 
ROW_NUMBER() OVER (PARTITION BY id ORDER BY [time] desc) as rn 
from [table]) as cte 
where rn = 1 
+0

я получаю сообщение об ошибке при использовании "с" пунктом – Tejas

+0

SQLiteManager: Вероятная ошибка синтаксиса SQL: с КТР в качестве ( выберите идентификатора, [MyText], ROW_NUMBER() OVER (PARTITION BY ид ORDER BY [MyTime] убывание) в р-н из [туЬаЫе]) выберите * из КТР, где гп = 1 [рядом "с": ошибка синтаксиса] Исключение Имя: NS_ERROR_FAILURE Сообщение об исключении: Компонент возвращенного код ошибки: 0x80004005 (NS_ERROR_FAILURE) [mozIStorageConnection.createStatement] – Tejas

+0

sqlite не поддерживает выражения cte: http://stackoverflow.com/questions/18593068/does-sqllite-support-common-table-expressions – Milen

1

Вы, кажется, хотите значение с максимальным временем. Ниже часто является эффективным способом, чтобы получить это:

select t.* 
from table t 
where not exists (select 1 from table t2 where t2.id = t.id and t2.time > t.time); 

Что это высказывание: «Принеси мне все строки из таблицы, где id не имеет ряд с большим id». С индексом на table(id, time) это, вероятно, самый эффективный способ выразить этот запрос.

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