mysql - 使用 SQL 查询获取每天的第一次和最后一次时间

标签 mysql datetime

我的数据库中有此数据:

musterid | musterdate          |  userid  | status
---------+---------------------+----------+-------
69       | 2017-09-01 11:58:37 |   50     |   1             
70       | 2017-09-01 12:00:07 |   50     |   1             
71       | 2017-09-01 12:29:15 |   50     |   1     
72       | 2017-09-01 12:31:15 |   50     |   1     
73       | 2017-09-01 09:58:37 |   51     |   1             
74       | 2017-09-01 11:00:07 |   51     |   1             
75       | 2017-09-01 12:29:15 |   51     |   1     
76       | 2017-09-01 07:31:15 |   51     |   1 

我想要这样的输出:

musterid | musterdate          |  userid  | status
---------+---------------------+----------+-------
69       | 2017-09-01 11:58:37 |   50     |   1      
72       | 2017-09-01 12:31:15 |   50     |   1 
73       | 2017-09-01 09:58:37 |   51     |   1 
76       | 2017-09-01 07:31:15 |   51     |   1 

即我想获取每个用户的第一次和最后一次进入时间。

如何实现这一目标?

我不知道如何创建一个表来表示数据,所以对我的演示感到抱歉。

最佳答案

获取“每个用户的首次和最后进入时间”的复杂查询:

SELECT 
    t1.*
FROM
    yourtable t1
        LEFT JOIN
    (SELECT 
        MIN(musterdate) AS min_mdate,
        MAX(musterdate) AS max_mdate,
        userid
    FROM
        yourtable
    GROUP BY userid) t2 ON t1.userid = t2.userid
WHERE
    t1.userid = t2.userid
    AND t1.musterdate IN (t2.min_mdate , t2.max_mdate)
ORDER BY userid , musterdate; 

关于mysql - 使用 SQL 查询获取每天的第一次和最后一次时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45995565/

相关文章:

python - 如何将 timedelta 转换为字符串并再次返回

mysql - 使用 mySQL 将时间舍入到最接近的 6 分钟

mysql - aws 数据管道 s3 到 mysql 错误

mysql - 可以在 SQL 删除查询中使用别名吗?

php - 以 JSON 格式存储多条记录时出错

c# - 删除时间部分并以不同格式转换日期时间

python - 在 Python 中,如何将自纪元以来的秒数转换为 `datetime` 对象?

mysql - 为什么mysql max_allowed_pa​​cket自动重置为1m

php - 具有多种功能的产品的数据库设计

python - 如何将字符串中的时间转换为日期时间格式,以便获得两列之间的差异