Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
加入2个mysql表并获取第一个和最后一个日期_Mysql_Sql_Date_Join - Fatal编程技术网

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

加入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),但我不知道在哪里使用它,以及如何获得第一个页面

我有两个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),但我不知道在哪里使用它,以及如何获得第一个页面。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