Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如何匹配这些值以进行比较_Sql_Sql Server_Datediff - Fatal编程技术网

Sql 如何匹配这些值以进行比较

Sql 如何匹配这些值以进行比较,sql,sql-server,datediff,Sql,Sql Server,Datediff,我需要得到两行中两个时间的日期差。我试图操纵此表的ID,但发现了一个死胡同 该表如下所示: ID TimeIn TimeOut EmpId 1 8.30am 12.30pm usr1 2 1.30pm 5.30pm usr1 我需要得到第一行的超时和第二行的Timein之间的时差 预期输出应如下所示: ID TimeIn TimeOut EmpId 1

我需要得到两行中两个时间的日期差。我试图操纵此表的ID,但发现了一个死胡同

该表如下所示:

ID      TimeIn       TimeOut     EmpId
 1      8.30am       12.30pm      usr1
 2      1.30pm       5.30pm       usr1
我需要得到第一行的超时和第二行的Timein之间的时差

预期输出应如下所示:

ID      TimeIn       TimeOut     EmpId
 1      8.30am       12.30pm      usr1
 2      1.30pm       5.30pm       usr1
午餐时间 usr1 1:00


1:00相当于1小时。

我想你真正想问的是,如何匹配这些值以进行比较。一旦两个值都有了,比较就很简单了,但是匹配成对的行就不那么简单了。查看这篇文章,了解如何一步一步地解决类似问题:

以下是我的代码,并在MYSQL中进行测试,以供参考

//EMP table content like below
id  TimeIn              TimeOut             EmpId
1   2015-03-21 09:00:00 2015-03-21 12:30:00 usr1
2   2015-03-21 13:30:00 2015-03-21 17:30:00 usr1
3   2015-03-21 08:00:00 2015-03-21 13:30:00 usr2
4   2015-03-21 14:00:00 2015-03-21 16:00:00 usr2
// find every empId TimeOut of first row and TimeIn of second row
SELECT id,TimeOut ,EmpId,
(select c.TimeIn from EMP  c where c.EmpId = a.EmpId and c.id > a.id limit 1) as 'TimeIn'
 from EMP a
//result as below
1   2015-03-21 12:30:00 usr1    2015-03-21 13:30:00
2   2015-03-21 17:30:00 usr1    NULL
3   2015-03-21 13:30:00 usr2    2015-03-21 14:00:00
4   2015-03-21 16:00:00 usr2    NULL
//find the timediff between TimeIn and TimeOut
select id,EmpId,timediff(TimeIn,TimeOut) as diff from 
(
  SELECT id,TimeOut ,EmpId,
  (select c.TimeIn from EMP  c where c.EmpId = a.EmpId and c.id > a.id limit 1) as 'TimeIn'
  from EMP a
) as tmp
// result as below
id  EmpId   diff
1   usr1    01:00:00
2   usr1    NULL
3   usr2    00:30:00
4   usr2    NULL

希望这能对您有所帮助。

根据您的数据库是否支持,请使用LAG函数。@Randy,LAG函数?从没听说过。我目前正在使用Sql Server。到目前为止您尝试了什么?TimeIn和TimeOut的数据类型是什么?@KhurramAli,我原来的查询比这个复杂一点。我已经尝试使用嵌套选择功能来区分ID。