Выберите самую новую запись, соответствующую session_id - PullRequest
1 голос
/ 11 марта 2009

Мне следовало уделять больше внимания в классе реляционных баз данных, поэтому мне нужна помощь.

У меня есть таблица, структурированная так (есть больше, но я только публикую соответствующую информацию):

+------------------+-------------+------+-----+-------------------+-------+
| Field            | Type        | Null | Key | Default           | Extra |
+------------------+-------------+------+-----+-------------------+-------+
| session_id       | char(32)    | NO   |     | NULL              |       |
| file             | varchar(30) | NO   |     | NULL              |       |
| access_time      | timestamp   | NO   |     | CURRENT_TIMESTAMP |       |
+------------------+-------------+------+-----+-------------------+-------+`

Я хочу выбрать file поле записи с наибольшим access_time для каждого session_id. Итак, последняя страница, посещенная в каждой сессии.

Я пробовал бесчисленное множество комбинаций DISTINCT и предложения GROUP BY, но я почему-то не могу обернуться вокруг него. Я использую MySQL. Помогите пожалуйста.

Ответы [ 3 ]

2 голосов
/ 11 марта 2009
select * from my_table t1
    where t1.access_time = (
       select max(t2.access_time) 
         from my_table t2 
         where t2.session_id = t1.session_id
       )
1 голос
/ 11 марта 2009

Я знаю, что это будет работать в SQL Server, и он должен портировать на MySQL.

select session_id, timestamp, file 
from table t1
join (select session_id, max(timestamp) as timestamp) 
        from table group by session_id) as t2
   on t1.session_id = t2.session_id
     and t1.timestamp = t2.timestamp
0 голосов
/ 11 марта 2009
SELECT
     T1.session_id,
     T1.file,
     T1.access_time
FROM
     My_Table T1
LEFT OUTER JOIN My_Table T2 ON
     T2.session_id = T1.session_id AND
     T2.access_time > T1.access_time
WHERE
     T2.session_id IS NULL

Если для одного и того же session_id имеются повторяющиеся значения access_time, вы можете получить несколько строк для этого session_id. Вы можете настроить это, чтобы избежать этого при необходимости, в зависимости от ваших бизнес-правил для этой ситуации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...