我有两个包含日期和时间戳的表,并尝试在最近的日期提取记录。
表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充满了非常好的答案,但是我无法找到任何类似的示例,这些示例涉及连接两个表并从中选择最大日期每个
答案 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