【问题标题】:join 2 mysql tables and get the first and last date加入2个mysql表并获取第一个和最后一个日期
【发布时间】:2015-05-16 20:39:45
【问题描述】:

我有 2 个 mysql 表,一个包含用户详细信息,第二个包含用户看到的所有页面 (1:N)

TABLE "users"
id int(10) auto_increment primay
ip varchar(15)
lang char(2)
...

TABLE "pages"
id int(10) auto_increment primay
uid int(10) index
datetime datetime
url varchar(255)

我知道可以加入 2 个表,但我有点困惑如何获取第一个和最后一个日期时间,以及“页面”表中的第一个 url...

SELECT * FROM users, pages WHERE users.id = pages.uid

我认为使用 GROUP BY / MIN(pages.datetime), MAX(pages.datetime) 但我不知道在哪里使用它,以及如何获取第一个 pages.url

【问题讨论】:

    标签: mysql sql date join


    【解决方案1】:

    正如您所提到的,您需要使用 Group byMINMAX 聚合函数来查找每个 user 的第一个和最后一个 datetime

    也不要使用逗号分隔的连接语法,它很旧且可读性不强,请使用正确的INNER JOIN 语法

    SELECT U.ID,
           MIN(pages.datetime) as First_date, 
           MAX(pages.datetime) as Last_date  
    FROM users U
    INNER JOIN  pages P
            ON U.id = P.uid
    Group by U.ID
    

    如果您想查看其他信息,如首次访问url等。然后您可以将上述结果加入主表以获取相关信息。

    select A.uid,A.url First_URL,C.url as Last_url,First_date,Last_date  
    from pages A
    INNER JOIN 
    (
    SELECT U.ID,
           MIN(pages.datetime) as First_date, 
           MAX(pages.datetime) as Last_date  
    FROM users U
    INNER JOIN  pages P
            ON U.id = P.uid
    Group by U.ID
    ) B
    ON  A.ID =B.ID 
    and A.datetime  = B.First_date
    INNER JOIN pages C
    on  C.ID =B.ID 
    and C.datetime  = B.Last_date  
    

    【讨论】:

    • 谢谢,它正在工作,但我认为添加其他字段非常困难,例如 pages.url (获得第一页看到),count(*) (获得每个用户访问了多少页)在这种情况下更容易对每个用户执行单独的查询
    猜你喜欢
    • 2013-02-09
    • 1970-01-01
    • 2012-05-29
    • 2014-12-14
    • 2013-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多