-4

假设我有两个表,两个表都包含一个日期列,例如

OUTTime
12:05:40
12:08:30
12:20:40

和其他表包括

INTime
12:10:35
12:12:23
12:16:40
12:30:11

现在我想要两个表(如 12:08:30 和 12:10:35)之间具有最小时间差的行给我 OUT 和 IN。同样 12:20:40 和 12:30:11 通过消除 OUTTime 12:05:40 并从 INTime 中消除 12:12:35 和 12:16:40 给了我另一行,这给了我正确的 OUTTime 和 InTime

有什么建议如何循环获取这些数据?

4

2 回答 2

0

如果您想获得匹配的 InTimes 和 OutTimes 并且只获得最接近的,请尝试以下操作:

设置

CREATE TABLE #OUTTime
(
    [Time] Time
)

INSERT INTO #OUTTime
    VALUES
        ('12:05:40'),
        ('12:08:30'),
        ('12:20:40')


CREATE TABLE #InTime
(
    [Time] Time
)

INSERT INTO #InTime
    VALUES
        ('12:10:35'),
        ('12:12:23'),
        ('12:16:40'),
        ('12:30:11')

现在查询:

;WITH CTE
As
(
    SELECT O.Time AS outTime, (SELECT MIN([Time]) FROM #InTime I WHERE I.[time] > O.[Time])  AS InTime
    FROM #OUTTime O
)
SELECT MAX(OutTime) As OutTime, InTime
FROM CTE
GROUP BY InTime

结果

OutTime             InTime
12:08:30.0000000    12:10:35.0000000
12:20:40.0000000    12:30:11.0000000
于 2013-09-20T14:54:27.853 回答
0

如果你联合这两个表......就像

SELECT Time, 'IN' FROM InTimesTable UNION SELECT Time, 'Out' FROM OutTimesTable 按时间排序

您可以将其转储到 excel 中,然后手动操作。

或者,您可以在此处填写您的问题,并获得更好的答案。

于 2013-09-20T12:47:29.093 回答