如何编写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