如何在一个领域获得最大时间和最短时间?

时间:2014-05-11 18:06:55

标签: mysql sql time max min

我想问一下mysql查询

我有像这样的表数据

我的数据

`userid | time| date
609  | 07:56:31|2014-01-23 
609  | 21:20:47|2014-01-23
609  | 17:25:27|2014-01-24
609  | 17:25:29|2014-01-24
609  | 17:13:54|2014-01-27
609  | 17:13:56|2014-01-27
609  | 07:55:09|2014-01-27`

我尝试了各种方法

但未成功

喜欢

set @start='1900-01-01';
set @finish='2033-12-31';
SELECT data.userid,t.clock_out,data.date from data 
inner join (select max(time)as clock_out,date,userid from data where time>='10:01' group by data.userid,tgl)t
on(data.date = t.date and data.userid=t.userid and t.clock_out=date.time)
规则set @start='1900-01-01'; set @finish='2033-12-31'; SELECT data.userid,t.clock_out,data.date from data inner join (select max(time)as clock_out,date,userid from data where time>='10:01' group by data.userid,tgl)t on(data.date = t.date and data.userid=t.userid and t.clock_out=date.time)
结果将是
clock_in where time<='10:00' and clock_out time>'10:00',clock_in or clock_out can fill in the blank/empty,,the date for example 25 and 26 is not input data,but can be retrieved from variable @start='1900-01-01'and @finish='2033-12-31';

userid|date |clock_in | clock_out 609 |2014-01-23 |07:56 |21:20 609 |2014-01-24 | |17:25 609 |2014-01-25 | | 609 |2014-01-26 | | 609 |2014-01-27 |07:55 |17:13

有人可以帮助我...... :(谢谢。提前......

2 个答案:

答案 0 :(得分:1)

我认为这就是你想要的,它不完全是你的答案,但我认为这是正确的。

您需要加入该用户ID的所有唯一日期列表,然后使用该列表进行分组,并从中获取min()和max()。

select t1.userid, 
       t2.date, 
       min(t1.time) as in_time, 
       max(t1.time) as out_time
  from test t1
  join (select distinct date from test where userid = 609) t2
 where t1.date = t2.date
   and userid = 609
 group by t1.userid, t2.date;

我还会说,选择日期部分,而不是日期和时间只是存储日期时间然后分组,这似乎要好得多。

http://sqlfiddle.com/#!2/7b8732/1

答案 1 :(得分:0)

你试过GROUP_CONCAT吗?

SELECT user_id, date, GROUP_CONCAT(time) as in_out FROM data GROUP BY date ORDER BY date,time;

这不是你需要的100%,但可能足够接近?