Вы должны быть очень осторожны.Допустим, у вас есть такие данные:
1 test
2 news
3 test
Если вы хотите получить значение от «1», то решения group by
будут работать.Если вы хотите значение от «3», то проблема немного в другом.То, как сформулирован ваш вопрос, кажется, вам нужно «3».
Самые последние версии SQLite поддерживают оконные функции.Позвольте мне предположить, что вы используете более раннюю версию.
Следующий запрос идентифицирует конечную группу строк с тем же значением, присваивая значение 0
num_different_later
:
select t.*,
(select count(*)
from t t2
where t2.cmd_id = t.cmd_id and
t2.created_timestamp > t.created_timestamp and
t2.value <> t.value
) as num_different_after
from t;
Мы можем получить самую раннюю временную метку, используя агрегацию:
select cmd_id, value, min(created_timestamp)
from (select t.*,
(select count(*)
from t t2
where t2.cmd_id = t.cmd_id and
t2.created_timestamp > t.created_timestamp and
t2.value <> t.value
) as num_different_after
from t
) t
where num_different_later = 0;