合并行SQL Server 2014

时间:2014-09-12 09:57:38

标签: sql sql-server tsql

假设我的表格中有3行,其中存储了以下数据。

ROW 1: 10:00 | 10:15 | Washington
ROW 2: 10:00 | 10:01 | New York
ROW 3: 10:02 | 10:03 | New York
ROW 4: 10:05 | 10:08 | New York
ROW 5: 10:20 | 10:40 | New York

'|'是一个列分隔符。

如何在表格中找到这些数据并将ROW 2和ROW 4合并在一起。结果应该是这样的:

ROW 1: 10:00 | 10:08 | New York

我想忽略第一行和最后一行,因为合并的时间跨度被覆盖了,我只希望“纽约”作为城市。

像: 如果接下来是< 5分钟前 然后行1.End_Time = ROW X.End_Time

提前谢谢

1 个答案:

答案 0 :(得分:0)

看起来您想要给定位置的第一个(最早的开始时间)以及该位置的下一行的结束时间,其开始时间比第一个开始时间长5分钟或更多。一种方法:

SELECT TOP(1)
      a.StartTime
    , b.EndTime
    , a.Location
FROM dbo.Table1 AS a
CROSS APPLY(
    SELECT TOP(1) EndTime
    FROM dbo.Table1 AS b
    WHERE
        b.Location = a.Location 
        AND b.StartTime >= DATEADD(minute, 5, a.StartTime)
    ) AS b
WHERE
    a.Location = 'New York'
ORDER BY
    a.StartTime;