簡體   English   中英

MySQL加入了兩個表的最大日期查詢

[英]MySQL joined query with max dates from two tables

我有兩個包含日期和時間戳的表,並嘗試在最近的日期中提取記錄。

表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字段將始終具有一個值,因為它是根據最后一個提醒值計算的。 查詢最終將檢查下一個提醒是否也在特定時間范圍內。

PS StackOverflow只有一個表包含日期和時間戳(我已經構建了我迄今為止所擁有的內容),但是我無法找到任何類似的示例,這些示例涉及連接兩個表並選擇最大日期從每個。

如果每個表只有兩列,則可以直接連接它並使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM