У меня есть таблица, которая выглядит примерно так:
timestamp value person
===============================================
2010-01-12 00:00:00 33 emp1
2010-01-12 11:00:00 22 emp1
2010-01-12 09:00:00 16 emp2
2010-01-12 08:00:00 16 emp2
2010-01-12 12:12:00 45 emp3
2010-01-12 13:44:00 64 emp4
2010-01-12 06:00:00 33 emp1
2010-01-12 15:00:00 12 emp5
Я хотел найти максимальное значение, связанное с каждым человеком. Очевидный запрос был:
select person,max(value) from table group by person
Теперь я хотел включить метку времени, связанную с каждым максимумом (значением). Я не мог использовать столбец отметки времени в приведенном выше запросе, потому что, как все знают, он не будет отображаться в предложении group by. Поэтому я написал это вместо:
select x.timestamp,x.value,x.person from table as x,
(select person,max(value) as maxvalue from table group by person order by maxvalue
desc) as y
where x.person = y.person
and x.value = y.maxvalue
Это работает - до некоторой степени. Теперь я вижу:
timestamp value person
===============================================
2010-01-12 13:44:00 64 emp4
2010-01-12 12:12:00 45 emp3
2010-01-12 06:00:00 33 emp1
2010-01-12 00:00:00 33 emp1
2010-01-12 08:00:00 16 emp2
2010-01-12 09:00:00 16 emp2
2010-01-12 15:00:00 12 emp5
Проблема в том, что теперь я получаю все записи для emp1 и emp2, которые заканчиваются одинаковым max (значением).
Предположим, среди emp1 и emp2 я хочу видеть запись только с последней отметкой времени. Я хочу это:
timestamp value person
===============================================
2010-01-12 13:44:00 64 emp4
2010-01-12 12:12:00 45 emp3
2010-01-12 06:00:00 33 emp1
2010-01-12 09:00:00 16 emp2
2010-01-12 15:00:00 12 emp5
Какой запрос мне нужно написать? Можно ли расширить вложенный запрос, который я написал, чтобы достичь того, чего я хочу, или нужно переписать все с нуля?
Если это важно, потому что я использую Sqlite, отметки времени фактически сохраняются как юлианские дни. Я использую функцию datetime () для преобразования их обратно в строковое представление в каждом запросе.