首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lead语句不正确

Lead语句不正确
EN

Stack Overflow用户
提问于 2017-10-03 03:48:00
回答 3查看 35关注 0票数 0

我正在尝试使用lead语句来使用新日期的开始日期作为先前的结束日期

代码语言:javascript
复制
Name_id        Pay      Start 
John1          $10      01-01-2011
John1          $11      01-05-2012
John1          $15      01-06-2014

我想要的是:

代码语言:javascript
复制
Name_id        Pay      Start           End 
John1          $10      01-01-2011      01-05-2012
John1          $11      01-05-2012      01-06-2014
John1          $15      01-06-2014      NULL 

我试过了

select name_id, start as start, LEAD(start, 1,0 ) over(order by date) as end

但我得到了

代码语言:javascript
复制
Name_id        Pay      Start           End 
John1          $10      01-01-2011      04-01-2011 //Random date??
John1          $11      01-05-2012       01-05-2012  
John1          $15      01-06-2014      01-06-2014
EN

回答 3

Stack Overflow用户

发布于 2017-10-03 04:16:36

我相信你的订单是错的。它应该是:

代码语言:javascript
复制
select name_id, start as start, LEAD(start, 1,0 ) over(order by start) as end
票数 0
EN

Stack Overflow用户

发布于 2017-10-03 04:26:16

您的查询应该会失败。我假设order by date实际上是order by start,并且您将结束列名括起来,因为end是一个关键字,并抛出错误的语法。除此之外,您的前导偏移量应该是LEAD (开始,1,开始)。语法为LEAD ( scalar_expression,offset,default )。请参阅lead documentation here。您可能还希望按Name_id进行分区,假设您有多个名称,并且不希望一个名称的开始日期是另一个名称的结束日期。

下面是我用来测试的表变量。

代码语言:javascript
复制
DECLARE @tbl TABLE (
    Name_id NVARCHAR(MAX),
    Pay INT,
    [Start] DATE
)

INSERT @tbl VALUES 
('John1',10,'01-01-2011'),
('John1',11,'01-05-2012'),
('John1',15,'01-06-2014')

下面是我用来测试的查询。

代码语言:javascript
复制
SELECT
    [Name_id],
    [Pay],
    [Start],
    LEAD([Start], 1, [Start]) OVER (PARTITION BY Name_id ORDER BY [Start]) AS [End]
FROM @tbl
票数 0
EN

Stack Overflow用户

发布于 2017-10-03 04:26:28

你的问题中有很多误导性的东西。

我刚刚从LEAD中删除了偏移量和默认值,它的工作与预期的一样。您的示例查询是错误的,并且存在语法错误。

代码语言:javascript
复制
create table #tt (
Name_id varchar(10), Pay int, [Start] date
)

insert into #tt values
('John1', 10, '01-01-2011'),
('John1', 11, '01-05-2012'),
('John1', 15, '01-06-2014')

select Name_id, Pay, Start, LEAD([Start]) over(order by [Start]) as [End]
from #tt

您不能说LEAD(Start,1,0),因为default应该是一个日期,而您提供的0是一个数字

对于您想要的输出,甚至不需要指定offsetdefault

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46532697

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档