0

私は元々、VAR_CHAR データ型の user_id と log_time の 2 つのフィールドを持つテーブルを持っています。サンプル入力

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

今私が取得したいのは、ユーザーの特定の日付の最初のエントリ (最も早い時間) です *日付ごとにユーザーの 2 つの入力がある可能性があることに注意してください

私はORDER BY、GROUP BY、JOIN、DISTINCTを掘り下げてきましたが、実際にそれを解決する方法を見つけることができないようです..Javaのif条件を介して目的の出力を得ることができましたが、オンにする必要がありますクエリ。いくつかの助けを期待しています..ちなみに、私はphpmyadminでmysqlを使用しています

4

2 に答える 2

0

こんな感じ。このような部分文字列フィールドを使用するのは簡単ではありませんが

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 )
于 2013-05-30T09:21:38.160 に答える
0

日付でグループ化しませんでした。

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 ║
╚═════════╩═════════════════════╝

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

出力

╔═════════╦════════════╦═══════════╗
║ 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 ║
╚═════════╩════════════╩═══════════╝
于 2013-05-30T09:14:49.147 に答える