我试图使用SQL查询来吸引员工。
这就是我想要做的。假设我有这张桌子t:
employee_id | timeinout
2 | 2019-02-22 02:10:00.000
2 | 2019-02-22 08:30:00.000
2 | 2019-02-22 09:10:00.000
3 | 2019-02-22 08:45:00.000
3 | 2019-02-22 10:30:00.000
3 | 2019-02-22 18:10:00.000
在上午9:16以后,应将早上6点至上午9:15之间的时间视为先入先出。
注意:如您在表格中所看到的,2019年2月22日02:10:00.000的时间不算是先入为主。
我可以通过执行此查询来获得第一个。
select employee_id,min(timeinout) as timein, max(timeinout) as timeout
group by employee_id,cast(timeinout as date)
employee_id | timein | timeout
2 | 2019-02-22 02:10:00.000 | 2019-02-22 09:10:00.000
3 | 2019-02-22 08:45:00.000 | 2019-02-22 18:10:00.000
如何获得此结果:
employee_id | timein | timeout
2 | 2019-02-22 08:30:00.000 | 2019-02-22 09:10:00.000
3 | 2019-02-22 08:45:00.000 | 2019-02-22 18:10:00.000
答案 0 :(得分:2)
您需要使用case..when
子句进行min
聚合。
如果您使用的是MySQL
,请尝试对str_to_date
使用以下查询:
select employee_id,
min( case when timeinout >= str_to_date('2019-02-22 06:10:00.000','%Y-%m-%d %h:%i:%s')
and timeinout < str_to_date('2019-02-22 09:16:00.000','%Y-%m-%d %h:%i:%s')
then timeinout end ) as timein,
max(timeinout) as timeout
from shift
group by employee_id,cast(timeinout as date);
employee_id timein timeout
2 2019-02-22 08:30:00 2019-02-22 09:10:00
3 2019-02-22 08:45:00 2019-02-22 18:10:00
如果您使用的是SQL Server
,请尝试对
convert( varchar, @val_date_time, 113 )
:
select employee_id,
min( case when timeinout >= convert( varchar, '2019-02-22 06:10:00.000', 113 )
and timeinout < convert( varchar, '2019-02-22 09:16:00.000', 113 )
then timeinout end ) as timein,
max(timeinout) as timeout
from shift
group by employee_id,cast(timeinout as date);
employee_id timein timeout
2 2019-02-22 08:30:00.000 2019-02-22 09:10:00.000
3 2019-02-22 08:45:00.000 2019-02-22 18:10:00.000
答案 1 :(得分:0)
您是否找到employee_id
和日期分组
select employee_id,min(timeinout) as timein, max(timeinout) as timeout
from table_name group by employee_id,cast(timeinout as date)
您必须转换timeinout
的日期,并且必须在group by
中使用那个
答案 2 :(得分:0)
根据您的描述,我创建了一个虚拟表。我发现以下查询为您提供了所需的结果。
SELECT employee_id,min(timeinout) as timein, max(timeinout) as timeout FROM `employee` WHERE timeinout > CAST('6:00:00' AS time) group by `employee_id`
结果是:-
timein timeout employee_id
2019-02-22 08:30:00 2019-02-22 09:10:00 2
2019-02-22 08:45:00 2019-02-22 18:10:00 3