2014-02-14 4 views
2

У меня есть таблица в базе данных, где я хочу выбрать из нее самые последние строки.Выберите последние строки

Я сделал fiddle, чтобы лучше объяснить мои потребности.

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

Я пытаюсь объяснить, что я хочу с псевдо SQL:

SELECT * FROM test WHERE date = Max(date) AND user = 'Timmy'; 

EDIT: Похоже, это не совсем понятно, что я хочу. «date» описывает дату создания профиля. Поэтому я хочу получить каждый последний профиль для «Тимми».

ответ

10

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

select t1.description, 
    t1.date, 
    t1.profile, 
    t1.user, 
    Replace(t1.locations, ',', '|') locations 
from test t1 
inner join 
(
    select max(date) date, profile, user 
    from test 
    group by profile, user 
) t2 
    on t1.user = t2.user 
    and t1.date = t2.date 
    and t1.profile = t2.profile 
where t1.user = 'Timmy' 
order by t1.profile 

См SQL Fiddle with Demo.

Подзапрос возвращает максимальную дату для каждого пользователя и профиля, затем он соединяется обратно к вашей таблице на пользователе, профиле и дате, чтобы вернуть самую последнюю строку для каждого профиля каждого пользователя (или, как здесь, для каждого профиля конкретного пользователя).

+3

* 'Я хочу получить ** каждый ** последний профиль для' Timmy '' * - Я верю 'профиль' также должен быть включен в' GROUP BY' –

+0

@AndriyM да, я думаю, вы правы. Обновлен мой ответ. Спасибо – Taryn

3
SELECT description, 
     date, 
     profile, 
     user, 
     Replace(locations, ',', '|') AS locations 
FROM test AS t 
WHERE date = (
        SELECT date 
        FROM test AS tm 
        WHERE tm.user = t.user 
        ORDER BY date DESC 
        LIMIT 1 
       ) 
    AND user = 'Timmy' 
ORDER BY profile ;  -- whatever 
+0

Щелкните здесь для [SQL Fiddle] (http://sqlfiddle.com/#!2/4ff08/67) –

+1

Это только ответ, который немного близок к решению проблемы. –

+0

Нажмите здесь для [Обновленного скрипта SQL] (http://sqlfiddle.com/#!2/4ff08/82) –

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