SQL查找先进先出时间(具有重叠和多行)

时间:2019-05-16 03:19:09

标签: sql sql-server sql-server-2008 time

我有一个包含进/出时间的表,现在我想检索“进/出”时间。

但是我不知道如何跨多行获取最后的时间

Table

来源

ID            IN Time                 Out Time
===  =======================    =======================
 A   2019-05-12 23:06:00.000    2019-05-13 03:00:00.000
 B   2019-05-14 09:01:00.000    2019-05-14 11:05:00.000
 C   2019-05-14 09:13:00.000    2019-05-14 17:33:00.000
 D   2019-05-14 16:15:00.000    2019-05-14 16:30:00.000
 E   2019-05-14 21:45:00.000    2019-05-14 22:12:00.000

预期结果

    ID         First In                   Last Out
    ===   =======================   =======================
     A    2019-05-12 23:06:00.000   2019-05-13 03:00:00.000
   B,C,D  2019-05-14 09:01:00.000   2019-05-14 17:33:00.000
     E    2019-05-14 21:45:00.000   2019-05-14 22:12:00.000

Expected Result

1 个答案:

答案 0 :(得分:0)

您应该像这样运行表: 1)设置参数@outTime =超出rhis行的时间。 2)检查下一行:如果开始时间早于开始,则检查其进入时间:如果晚于-将@out时间设置为开始时间,然后继续进行此检查。 我写了查询\函数的想法:

@outTime = FirstRow.timeout
@inTime = FirstRow.timein
@id = ""
for(row in table)
{
    if(row.timein < @outTime)
    {
        if(row.timeout > @outTime)
        {
            @outTime = row.timeout
        }
        @id.concatenate("," + row.id)
        check next row
        after this loop:
        *print row(@id, @timein, @timeout)
    }
    check next row
}