如何编写sql查询以获得下面的结果

我有一个包含以下数据的表。如何编写sql查询以获得下面的结果

和预期的结果将是下面的数据。

这里第一步完成日期是第二步的抵达日期和第二步完成日期是第3步的抵达日期。

如何编写SQL查询以获得此结果。

回答:

some_logical_grouping_of_data shoud定义可用于的数据组。

Select ID, stepname, arrival_date, duedate, 

LEAD (arrival_date) OVER (partition by "some_logical_grouping_of_data" order by ID) as completion_date

from table;

回答:

这个脚本给您预期的结果

;With Cte(

id,StepName,ArrivalDate,duedate

)

AS

(

SELECT 1,'Step1','25/12/2017','1/1/2018' UNION ALL

SELECT 2,'Step2','26/12/2017','1/1/2018' UNION ALL

SELECT 3,'Step3','27/12/2017','1/1/2018'

)

SELECT

id

,StepName

,ArrivalDate

,duedate

,ISNULL(LEAD(ArrivalDate,1)OVER(ORDER BY ArrivalDate),'') AS CompletionDate

FROM CTE

结果

id StepName ArrivalDate duedate CompletionDate 

-----------------------------------------------------

1 Step1 25/12/2017 1/1/2018 26/12/2017

2 Step2 26/12/2017 1/1/2018 27/12/2017

3 Step3 27/12/2017 1/1/2018

回答:

这应该成为你的目的,完成日期为开始日期从明年ID

SELECT x.id 

,x.stepname

,x.arrival_date

,x.due_date

,isnull(y.arrival_date, '') Completion_date

FROM x

LEFT JOIN (

SELECT id

,step1

,step2

,arrival_date

FROM x

) y ON x.id = y.id + 1

回答:

授第n行根据id列的升序排列。(如果id列有空白)。然后与rn = rn + 1一起使用LEFT JOIN/RIGHT JOIN

查询

;with cte as(

select [rn] = row_number() over(

order by [id]

), *

from [your_table_name]

)

select t1.[stepName], t1.[ArrivalDate], t1.[dueDate],

coalesce(t2.[dueDate], '') as [completiondate]

from cte t1

left join cte t2

on t1.[rn] + 1 = t2.[rn];

回答:

这是一个坏主意,加入基于字符串后缀的数据。我假设step1总是有ID 1,step13总是有ID 13等等。然后你可以做类似于

SELECT t1.ID, t1.Stepname, t1.arrival_date, t2.arrival_date as completion_date 

FROM tablename t1

LEFT JOIN tablename t2 on t1.ID + 1 = t2.ID;

以上是 如何编写sql查询以获得下面的结果 的全部内容, 来源链接: utcz.com/qa/264561.html

回到顶部