从表中减去SQL时间(从第二个表中针对特定时间状态额外减少)
我有T1表和T2表 T1 T2 如果表T2中不存在状态保持,则我需要结果TIME2-TIME1;如果该记录的表中存在状态保持,则为TIME2-TIME1-TIME从表中减去SQL时间(从第二个表中针对特定时间状态额外减少),sql,subtraction,Sql,Subtraction,我有T1表和T2表 T1 T2 如果表T2中不存在状态保持,则我需要结果TIME2-TIME1;如果该记录的表中存在状态保持,则为TIME2-TIME1-TIME 1001 9 (10-1) 1002 14(20-1-5) 我最初编写了SQL查询,但这不起作用,因为第一条记录返回NULL,而第二条记录的结果是OK SELECT T1.ID,T1.TIME2-T1.TIME1-T2.TIME FROM T1 LEFT OUTER JOIN T2 ON T1.ID=T2.ID AND T2
1001 9 (10-1)
1002 14(20-1-5)
我最初编写了SQL查询,但这不起作用,因为第一条记录返回NULL,而第二条记录的结果是OK
SELECT T1.ID,T1.TIME2-T1.TIME1-T2.TIME
FROM T1
LEFT OUTER JOIN T2 ON T1.ID=T2.ID AND T2.STATUS='HOLD'
谢谢显然,表T2可能包含多个与T1.ID匹配的行。假设T2始终包含至少一个这样的行,那么我们可以执行以下操作:
select T1.ID, min(case when T2.STATUS<>'HOLD' then T1.TIME2-T1.TIME1
when T2.STATUS='HOLD' then T1.TIME2-T1.TIME1-T2.[TIME] end)
from T1 join T2
on T1.ID=T2.ID
group by T1.ID
选择T1.ID,min(情况是T2.状态为“保持”,然后选择T1.TIME2-T1.TIME1
当T2.STATUS='HOLD'时,则T1.TIME2-T1.TIME1-T2。[时间]结束)
从T1连接T2
在T1.ID=T2.ID上
按T1.ID分组
或简而言之
select
t1.id,
t1.time2-case when status='HOLD' then t2.time else 0 end-t1.time1
from
t1 left join t2 on t1.id=t2.id and t2.status='HOLD'
示例数据表明T2将始终包含T1.ID的一些行,如果是这样,我认为您的
min(case…
方法是有效的。然而,左外连接则是不必要的。如果缺少T2的匹配行,左外部联接
只提供T2.STATUS的空值进行操作,并且大小写逻辑失败。@hardmath:谢谢您的评论,我已将左外部联接替换为简单联接
SELECT T1.ID
, Case
When T2.STATUS = 'HOLD' THEN T1.Time2 - T1.Time1 - T2.Time
Else T1.Time2 -T1.Time1
END
FROM T1
LEFT OUTER JOIN T2 ON T1.ID=T2.ID AND T2.STATUS='HOLD'
select T1.ID, min(case when T2.STATUS<>'HOLD' then T1.TIME2-T1.TIME1
when T2.STATUS='HOLD' then T1.TIME2-T1.TIME1-T2.[TIME] end)
from T1 join T2
on T1.ID=T2.ID
group by T1.ID
select
t1.id,
t1.time2-case when status='HOLD' then t2.time else 0 end-t1.time1
from
t1 left join t2 on t1.id=t2.id and t2.status='HOLD'