加入2个mysql表并获取第一个和最后一个日期

时间:2015-03-14 10:35:21

标签: mysql sql date join

我有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个表格,但我有点困惑如何获得第一个和最后一个日期时间,以及来自"页面的第一个网址"表...

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

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

1 个答案:

答案 0 :(得分:3)

正如您所提到的,您需要Group byMIN& MAX聚合函数,用于查找每datetime的第一个和最后一个user

也不要使用逗号分隔的连接语法,这种语法非常陈旧,使用正确的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