给我最好的循环来在sql中迭代性能

时间:2013-09-20 12:39:11

标签: sql-server

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

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

有关如何循环获取此数据的任何建议吗?

2 个答案:

答案 0 :(得分:0)

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

选择时间' IN'    来自InTimesTable 联盟 选择时间,'输出'    来自OutTimesTable 按时间排序

您可以将其转储到Excel中,并手动操作。

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

答案 1 :(得分: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