我有 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)
我知道可以加入这两个表,但我有点困惑如何获取第一个和最后一个日期时间,以及“页面”表中的第一个网址...
SELECT * FROM users, pages WHERE users.id = pages.uid
我认为使用 GROUP BY/MIN(pages.datetime), MAX(pages.datetime) 但我不知道在哪里使用它,以及如何获取第一个pages.url
最佳答案
正如您所提到的,您需要将 Group by
与 MIN
和 MAX
聚合函数一起使用来查找第一个和最后一个 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
关于mysql - 连接2个mysql表并获取第一个和最后一个日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29047917/