[英]MySQL - SELECT MIN time per user_id per date
I originally have a table with two fields user_id and log_time both of VAR_CHAR data types. 我最初有一个表,其中包含两个字段VAR_CHAR数据类型的user_id和log_time。 sample input 样本输入
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
i can't alter this table so what i did was this query to be able to separate date and time: 我无法更改此表,因此我所做的是此查询能够分隔日期和时间:
SELECT `user_id` ,
SUBSTRING( `log_time` , 1, 10 ) AS 'date',
SUBSTRING( `log_time` , 11 ) AS 'time'
FROM `user_log`
ORDER BY `user_id`
i had this output: 我有这个输出:
u ü
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
now what i want to get is the first entry (earliest time) on a specific date of a user *noting that there can be two inputs of user per date 现在我要获取的是用户特定日期的第一个条目(最早的时间)*注意,每个日期可以有两个用户输入
i been digging on ORDER BY, GROUP BY, JOINs, DISTINCT but can't seem to find how i can really work it out..i was able to have the desired output through if conditions on java, but i need it to be on a query. 我一直在研究ORDER BY,GROUP BY,JOIN,DISTINCT,但似乎找不到真正的解决方法。.我能够通过if条件在java上获得所需的输出,但是我需要将其打开一个问题。 hoping for some help.. by the way i am using mysql on phpmyadmin 希望有所帮助..顺便说一句,我在phpmyadmin上使用mysql
You did not group them by date. 您没有按日期对它们进行分组。
SELECT user_ID, MIN(log_time) log_time
FROM tableName
GROUP BY user_ID, DATE(log_time)
ORDER BY user_ID, log_time
OUTPUT 输出值
╔═════════╦═════════════════════╗
║ 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 ║
╚═════════╩═════════════════════╝
but if you want to separate DATE
and TIME
但是如果您想将DATE
和TIME
分开
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
OUTPUT 输出值
╔═════════╦════════════╦═══════════╗
║ 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 ║
╚═════════╩════════════╩═══════════╝
Soemthing like this. 像这样 Although it won't be quick using substringed fields like this 尽管使用像这样的子字符串字段不会很快
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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.