mysql - 连接2个mysql表并获取第一个和最后一个日期

标签 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)

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

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

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

最佳答案

正如您所提到的,您需要将 Group byMINMAX 聚合函数一起使用来查找第一个和最后一个 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/

相关文章:

mysql - 同一实体的多个表示正在合并错误

php - 使用 vim Tabularize 插件只匹配第一次出现的定界符

php - 超过 100 时的日期和里程,否则返回红绿灯

java - 在 Java 中将日期从 UTC 转换为 PST

php - 使用 CodeIgniter 的 MySQL 查询问题

php - 在 php/mysql 中跟踪记录更新之间的变化

php - PHP 和 MySql 中的时间戳查询已更新

java - 条件左外连接 SQL 查询到 JPQL

ios - 如何自定义UIDatePicker实现如下输出?

php - 数据库移动后 SQL 错误