代码之家  ›  专栏  ›  技术社区  ›  Andrew Ensley

选择最新的记录匹配会话\u id

  •  1
  • Andrew Ensley  · 技术社区  · 17 年前

    我应该在关系数据库类中更加关注,所以我需要一些帮助。

    我有一个这样的表格(还有更多,但我只是发布相关信息):

    +------------------+-------------+------+-----+-------------------+-------+
    | 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 . 所以几乎每个会话中访问的最后一页。

    我尝试过无数个不同的和按从句分组的组合,但出于某种原因,我似乎无法完全理解。我在使用MySQL。请帮忙。

    3 回复  |  直到 17 年前
        1
  •  1
  •   cjk    17 年前

    我知道这将在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
    
        2
  •  2
  •   MarkusQ    17 年前
    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
           )
    
        3
  •  0
  •   Tom H zenazn    17 年前
    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
    

    如果同一会话的访问时间值重复,则该会话的访问时间值可能会有多行。如果需要,您可以对此进行调整,以避免出现这种情况,具体取决于该情况的业务规则。