SQL 查询将下一行的数据放到当前行

SQL query to put data of the next row to the current row

我正在尝试编写一个查询,将日期从一行放到另一行。

2021-04-23 07:52:41    (start time)
2021-04-23 08:14:04    (stop time)
2021-04-23 08:14:04    (start time)
2021-04-23 09:52:49    (stop time)
2021-04-23 09:52:49    (start time)
2021-04-23 09:53:44    (stop time)
2021-04-23 09:53:44    (start time)
2021-04-23 09:53:59    (stop time)

例如,我选择了带有日期的行。这些对是开始和停止日期时间。

对于报告,我正在尝试做这样的事情

Start                      Stop
--------------------------------------------------
2021-04-23 07:52:41.000    2021-04-23 08:14:04.000
2021-04-23 08:14:04.000    2021-04-23 09:52:49.000

对数可以不同。我正在考虑将所有行更改为列,但它在报表设计器中对我来说并不适用。

有没有办法把每两行合并成一行? (例如我有 14 行,想在 7 行中成对)

编辑:不幸的是,我使用的是 SQL Server 2008,它不支持超前和滞后。但是我通过这个 join

设法得到了想要的结果
select ta.*, tb.*
from table1 ta
left join table1 tb on ta.ID = tb.ID -1
where (ta.ID % 2 = 0)

使用示例数据,您可以使用 lead 获取下一行的日期并使用 row_number 分配行号。然后你可以 select 只有奇数行给你一个开始和相应的停止:

select [start], [stop] from
(
    select [date] [Start],
      Row_Number() over(order by [date]) rn,
      Lead([date]) over(order by [date]) [Stop]
    from T
)T
where rn % 2=1