TL; DR:有没有办法将行插入到子查询产生的中间"视图"或"表"中?
我不允许在数据库中更改表(SQL Server 2014).
该表仅记录任务的开始时间,但对于另一个查询,我需要找出所有任务的开始时间和结束时间.我可以冒昧地完成他们之间没有休息的任务.
通过在a.row = b.row - 1上使用JOIN,我能够获得除最后一个任务之外的所有任务的开始时间和结束时间.
我需要检索所有任务的开始和结束时间,可能是在中间查询结果"table"或"view"中插入一行,其中时间戳为NOW().
输入表
TaskID StartTime
-----------------------------
1 2018-08-10 03:00:00
2 2018-08-10 06:12:00
3 2018-08-11 07:13:00
Run Code Online (Sandbox Code Playgroud)
预期输出表
TaskID StartTime EndTime
----------------------------------------------------------
1 2018-08-10 03:00:00 2018-08-10 06:12:00
2 2018-08-10 06:12:00 2018-08-11 07:13:00
3 2018-08-11 07:13:00 2018-08-16 15:26:00 (now)
Run Code Online (Sandbox Code Playgroud)
输出表
TaskID StartTime EndTime
----------------------------------------------------
1 2018-08-10 03:00:00 2018-08-10 06:12:00
2 2018-08-10 06:12:00 2018-08-11 07:13:00
Run Code Online (Sandbox Code Playgroud)
WITH EnterTaskTimes AS (
SELECT ROW_NUMBER() OVER (ORDER BY StartTime ASC) TaskID
, [Timestamp] AS StartTime
FROM TaskLog
),
TaskTimes As (
SELECT
a.TaskID Task,
a.StartTime StartTime,
b.StartTime EndTime
FROM TaskLog a JOIN TaskLog b
ON a.TaskID = b.TaskID - 1
)
Run Code Online (Sandbox Code Playgroud)
谢谢,
使用Lead()函数:
-- setup
Create Table Time_Lapse
(
TaskID Int
, StartTime DateTime
)
Insert Into dbo.Time_Lapse
(
TaskID
, StartTime
)
Select 1, '2018-08-10 03:00:00'
Union All Select 2, '2018-08-10 06:12:00'
Union All Select 3, '2018-08-11 07:13:00'
-- query
Select
tl.TaskID
, tl.StartTime
, Lead(tl.StartTime, 1, GetDate()) Over (Order By tl.StartTime) As EndTime
From dbo.Time_Lapse As tl
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
65 次 |
| 最近记录: |