加入2个mysql表并获取第一个和最后一个日期
我有两个mysql表,一个包含用户详细信息,第二个包含用户看到的所有页面(1:N) 我知道可以加入这两个表,但我有点困惑如何从“pages”表中获取第一个和最后一个datetime以及第一个url加入2个mysql表并获取第一个和最后一个日期,mysql,sql,date,join,Mysql,Sql,Date,Join,我有两个mysql表,一个包含用户详细信息,第二个包含用户看到的所有页面(1:N) 我知道可以加入这两个表,但我有点困惑如何从“pages”表中获取第一个和最后一个datetime以及第一个url SELECT * FROM users, pages WHERE users.id = pages.uid 我认为使用groupby/MIN(pages.datetime)、MAX(pages.datetime)和MAX(pages.datetime),但我不知道在哪里使用它,以及如何获得第一个页面
SELECT * FROM users, pages WHERE users.id = pages.uid
我认为使用groupby/MIN(pages.datetime)、MAX(pages.datetime)和MAX(pages.datetime),但我不知道在哪里使用它,以及如何获得第一个页面。url正如您提到的,您需要使用
groupby
和MIN
和MAX
聚合函数来查找每个用户的第一个和最后一个datetime
另外,不要使用逗号分隔的连接语法,这种语法非常陈旧,可读性不强。请使用适当的内部连接语法
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(*)(用于获取每个用户访问的页面数量)我认为在这种情况下,对每个用户执行分离查询更容易
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