MySQL加入了两个表的最大日期查询

时间:2014-01-03 01:15:47

标签: mysql

我有两个包含日期和时间戳的表,并尝试在最近的日期提取记录。

表1(会议):

id---login_date------------ip
01---2014-01-02 23:58:40---127.0.0.1
03---2014-01-01 13:20:16---127.0.0.1
01---2014-01-01 17:06:15---127.0.0.1
02---2013-12-30 14:34:39---127.0.0.1

*还有多个其他非日期列未参与此解决方案

表2(提醒):

id---last_reminder---------next_reminder
03---2013-12-29 22:50:18---2014-01-07 22:50:18
02---2014-01-01 15:15:15---2014-01-09 15:15:15
02---2013-11-16 08:54:23---2013-11-23 08:54:23

现在,这是我从第一个表中获取每个用户ID的所有最新登录的方式:

SELECT a.id, a.login_date
FROM sessions a
WHERE a.login_date = (
    SELECT max(login_date) as login_date
    FROM sessions
    WHERE id = a.id
    LIMIT 1
    )
GROUP BY a.id

我想要获得的不仅是每个用户ID的最后登录日期,还包括最后发送的提醒(如果有的话)。由于这涉及选择两个最大日期,我从来没有得到正确的结果。

期望的结果:

id---login_date------------last_reminder---------next_reminder------
01---2014-01-02 23:58:40---NULL------------------NULL---------------
02---2013-12-30 14:34:39---2014-01-01 15:15:15---2014-01-09 15:15:15
03---2014-01-01 13:20:16---2013-12-29 22:50:18---2014-01-07 22:50:18

请有人帮我解决这个问题。

谢谢, 西蒙

//////////////////////// 2014-01-04更新了附加专栏////////////// //////////////

根据请求,上面的表结构已更新为包含生成正确查询结果所需的额外字段。

*请注意,next_reminder字段将始终具有一个值,因为它是根据最后一个提醒值计算的。该查询最终将检查下一个提醒是否也在特定时间范围内。

P.S。当只有一个表包含日期和时间戳(我已经构建了我迄今为止所拥有的内容)时,StackOverflow充满了非常好的答案,但是我无法找到任何类似的示例,这些示例涉及连接两个表并从中选择最大日期每个

1 个答案:

答案 0 :(得分:2)

如果每个表只有两列,则可以直接加入,并使用MAX()获取每个ID的最新记录。

SELECT  a.id, 
        MAX(login_date) latest_login_date, 
        MAX(last_reminder) latest_reminder
FROM    sessions a  
        LEFT JOIN reminders b
            ON a.id = b.id
GROUP   BY a.id