Sql 更新对应行值的日期

Sql 更新对应行值的日期,sql,sql-server,Sql,Sql Server,我正在尝试在下面的数据集中为给定的开始日期4/20创建newdate列,在下面的示例中,为requestdate小于开始日期4/20的相应发票号创建newdate列。我试着设置一个计数发票号码的柜台,但没用 有人能帮我吗 invoice# RequestDate Newdate 123 4/18/2017 4/20/2017 123 4/16/2017 4/21/2017 123 4/17/2017 4/22/2017 126

我正在尝试在下面的数据集中为给定的开始日期4/20创建newdate列,在下面的示例中,为requestdate小于开始日期4/20的相应发票号创建newdate列。我试着设置一个计数发票号码的柜台,但没用

有人能帮我吗

invoice#    RequestDate Newdate
123          4/18/2017  4/20/2017
123          4/16/2017  4/21/2017
123          4/17/2017  4/22/2017
126          4/15/2017  4/20/2017
126          4/16/2017  4/21/2017
126          4/17/2017  4/22/2017
126          4/18/2017  4/23/2017
126          4/19/2017  4/24/2017
131          4/13/2017  4/20/2017
131          4/14/2017  4/21/2017
131          4/15/2017  4/22/2017
131          4/16/2017  4/23/2017
131          4/17/2017  4/24/2017
131          4/18/2017  4/25/2017
131          4/19/2017  4/26/2017

首先,让我们确定要修改的发票。我们在子查询PastinVoice中执行此操作。然后,您可以使用行号和创建递增日期

SELECT AllInvoices.invoice,
    RequestDate,
    CASE
        WHEN PastInvoices.invoice IS NOT NULL
        THEN DATEADD(day, (ROW_NUMBER() over (partition by AllInvoices.invoice order by AllInvoices.invoice)) - 1, GETDATE())
        ELSE RequestDate
    END as NewDate
FROM RequestDate as AllInvoices
LEFT OUTER JOIN 
    (select distinct invoice from RequestDate where RequestDate < GETDATE()) as PastInvoices
on AllInvoices.invoice = PastInvoices.invoice

首先,让我们确定要修改的发票。我们在子查询PastinVoice中执行此操作。然后,您可以使用行号和创建递增日期

SELECT AllInvoices.invoice,
    RequestDate,
    CASE
        WHEN PastInvoices.invoice IS NOT NULL
        THEN DATEADD(day, (ROW_NUMBER() over (partition by AllInvoices.invoice order by AllInvoices.invoice)) - 1, GETDATE())
        ELSE RequestDate
    END as NewDate
FROM RequestDate as AllInvoices
LEFT OUTER JOIN 
    (select distinct invoice from RequestDate where RequestDate < GETDATE()) as PastInvoices
on AllInvoices.invoice = PastInvoices.invoice


我不确定我是否理解您的问题,您能否发布您希望如何显示数据?@VDK我希望以上述格式显示日期,该格式反映了请求日期的每个新发票从4/20开始的相应新日期不确定我是否理解您的问题,您可以发布您希望数据显示的方式吗?@VDK我希望数据以上述格式显示,该格式反映了RequestDate的每个新发票从4/20开始的相应的NEWDATE数据中不存在NEWDATE列。我想使用请求日期和发票创建它。有意义吗?@Goal7不,没有意义。请解释您打算如何创建NewDate列以及如何填充它。@GuillaumeCR我需要帮助创建NewDate列。基本上,如果在给定的日期4/20,在这种情况下,我希望找到所有已经过期的请求日期,并从当前日期开始更新它们,直到发票结束。因此,您可以看到上面示例中的发票123的新日期从4/20开始,请求日期为4/18,然后是4/19,新日期为4/21。您列出了一组行和一个newdate列。我很遗憾回答了你的问题,因为它的形式不正确,我将被解雇。逻辑并不清楚。您希望将所有发票123的requestdate替换为什么日期?@Goal7在您的示例中,发票123的新日期从4/20到4/22,而requestdate从4/18到4/16。对于发票126,您的所有新日期正好在您的请求日期后5天。这些看起来像相反的模式。是哪一个?数据中的NEWDATE列不存在。我想使用请求日期和发票创建它。有意义吗?@Goal7不,没有意义。请解释您打算如何创建NewDate列以及如何填充它。@GuillaumeCR我需要帮助创建NewDate列。基本上,如果在给定的日期4/20,在这种情况下,我希望找到所有已经过期的请求日期,并从当前日期开始更新它们,直到发票结束。因此,您可以看到上面示例中的发票123的新日期从4/20开始,请求日期为4/18,然后是4/19,新日期为4/21。您列出了一组行和一个newdate列。我很遗憾回答了你的问题,因为它的形式不正确,我将被解雇。逻辑并不清楚。您希望将所有发票123的requestdate替换为什么日期?@Goal7在您的示例中,发票123的新日期从4/20到4/22,而requestdate从4/18到4/16。对于发票126,您的所有新日期正好在您的请求日期后5天。这些看起来像相反的模式。是哪一个?纪尧姆格没有看到你的解决方案。当请求者询问当前日期时,您硬编码为4-19。让我们看看目标7是否会麻烦您将答案标记为正确。@GuillaumeCR如果我想将日期更改为今天以外的日期,您以前的答案就是我想要的答案。对于您之前询问的示例,这意味着如果一张发票有3个请求日期,即4/19、4/20和4/21,那么它将有4/20、4/20和4/21的新日期,如果我想用订单123的4/19、4/20、4/22更新它,该怎么办?我应该做些什么改变?@Goal7你是说4/20、4/21和4/22吗?@GuillaumeCR是的。抱歉,Guillaumeger没有看到你的解决方案。当请求者询问当前日期时,您硬编码为4-19。让我们看看目标7是否会麻烦您将答案标记为正确。@GuillaumeCR如果我想将日期更改为今天以外的日期,您以前的答案就是我想要的答案。对于您之前询问的示例,这意味着如果一张发票有3个请求日期,即4/19、4/20和4/21,那么它将有4/20、4/20和4/21的新日期,如果我想用订单123的4/19、4/20、4/22更新它,该怎么办?我应该做些什么改变?@Goal7你是说4/20、4/21和4/22吗?@GuillaumeCR是的。道歉。