【问题标题】:MySQL - SELECT MIN time per user_id per dateMySQL - SELECT MIN time per user_id per date
【发布时间】:2013-05-30 09:11:26
【问题描述】:

我最初有一个表,其中包含两个字段 user_id 和 log_time 都是 VAR_CHAR 数据类型。 样本输入

user_id       log_time
00148   2013-05-25 08:15:03
00176   2013-05-25 09:09:32
00152   2013-05-25 10:25:55
00146   2013-05-25 10:39:14
00148   2013-05-25 21:23:29
00146   2013-05-25 21:24:52
00152   2013-05-25 21:25:15
00176   2013-05-25 21:26:34
00148   2013-05-26 09:25:53
00176   2013-05-26 09:54:09
00152   2013-05-26 09:58:21
00146   2013-05-26 10:19:04
00148   2013-05-26 18:13:26
00146   2013-05-26 18:14:04
00152   2013-05-26 19:55:20
00176   2013-05-26 19:56:51

我无法更改此表,所以我所做的是这个查询能够分隔日期和时间:

SELECT  `user_id` , 
        SUBSTRING(  `log_time` , 1, 10 ) AS  'date',
        SUBSTRING(  `log_time` , 11 ) AS  'time'
FROM    `user_log` 
ORDER   BY  `user_id` 

我有这个输出:

ser_id    date       time
00148   2013-05-25   08:15:03
00176   2013-05-25   09:09:32
00152   2013-05-25   10:25:55
00146   2013-05-25   10:39:14
00148   2013-05-25   21:23:29
00146   2013-05-25   21:24:52
00152   2013-05-25   21:25:15
00176   2013-05-25   21:26:34
00148   2013-05-26   09:25:53
00176   2013-05-26   09:54:09
00152   2013-05-26   09:58:21
00146   2013-05-26   10:19:04
00148   2013-05-26   18:13:26
00146   2013-05-26   18:14:04
00152   2013-05-26   19:55:20
00176   2013-05-26   19:56:51

现在我想要得到的是用户特定日期的第一个条目(最早时间) *注意每个日期可以有两个用户输入

我一直在研究 ORDER BY、GROUP BY、JOIN、DISTINCT 但似乎无法找到我如何真正解决它..我能够通过 java 上的 if 条件获得所需的输出,但我需要它进行查询。希望得到一些帮助..顺便说一句,我在 phpmyadmin 上使用 mysql

【问题讨论】:

    标签: java mysql phpmyadmin


    【解决方案1】:

    您没有按日期对它们进行分组。

    SELECT  user_ID, MIN(log_time) log_time
    FROM    tableName
    GROUP   BY user_ID, DATE(log_time)
    ORDER   BY user_ID, log_time
    

    输出

    ╔═════════╦═════════════════════╗
    ║ USER_ID ║      LOG_TIME       ║
    ╠═════════╬═════════════════════╣
    ║     146 ║ 2013-05-25 10:39:14 ║
    ║     146 ║ 2013-05-26 10:19:04 ║
    ║     148 ║ 2013-05-25 08:15:03 ║
    ║     148 ║ 2013-05-26 09:25:53 ║
    ║     152 ║ 2013-05-25 10:25:55 ║
    ║     152 ║ 2013-05-26 09:58:21 ║
    ║     176 ║ 2013-05-25 09:09:32 ║
    ║     176 ║ 2013-05-26 09:54:09 ║
    ╚═════════╩═════════════════════╝
    

    但是如果你想分开DATETIME

    SELECT  user_id , 
            SUBSTRING(log_time, 1, 10) AS 'date',
            MIN(SUBSTRING(log_time, 11)) AS 'time'
    FROM    TableName
    GROUP   BY user_id, SUBSTRING(log_time,1,10)
    ORDER   BY user_id, log_time
    

    输出

    ╔═════════╦════════════╦═══════════╗
    ║ USER_ID ║    DATE    ║   TIME    ║
    ╠═════════╬════════════╬═══════════╣
    ║     146 ║ 2013-05-25 ║  10:39:14 ║
    ║     146 ║ 2013-05-26 ║  10:19:04 ║
    ║     148 ║ 2013-05-25 ║  08:15:03 ║
    ║     148 ║ 2013-05-26 ║  09:25:53 ║
    ║     152 ║ 2013-05-25 ║  10:25:55 ║
    ║     152 ║ 2013-05-26 ║  09:58:21 ║
    ║     176 ║ 2013-05-25 ║  09:09:32 ║
    ║     176 ║ 2013-05-26 ║  09:54:09 ║
    ╚═════════╩════════════╩═══════════╝
    

    【讨论】:

      【解决方案2】:

      像这样。虽然使用这样的子字符串字段不会很快

      SELECT user_id , SUBSTRING( log_time , 1, 10 ) AS `date`, MIN(SUBSTRING( log_time , 11 )) AS `time` 
      FROM user_log
      GROUP BY user_id , SUBSTRING( log_time , 1, 10 )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-29
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-02-26
        相关资源
        最近更新 更多