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
我正在尝试编写一个查询,将日期从一行放到另一行。
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