Sql 如何复制现有列但包含所有值';向上一个单元格';,但是被另一列分割了?
我正在用sql创建一个表,其中包含所有已关闭的活动。我的一些专栏是Sql 如何复制现有列但包含所有值';向上一个单元格';,但是被另一列分割了?,sql,Sql,我正在用sql创建一个表,其中包含所有已关闭的活动。我的一些专栏是Companyname和ActualEndDate。 该表按CompanyName和ActualEndDate desc排序 我想添加一个列,其中包含每个公司最后一次活动的日期。因此,如果我在2018-01-01、2018-02-01和2018-02-12(在ActualEndDate列中)为A公司安排了三项活动,我想在其旁边增加一列,其中新列中2018-01-01的行为空,2018-02-01为2018-01-01,而2018-
Companyname
和ActualEndDate
。
该表按CompanyName和ActualEndDate desc排序
我想添加一个列,其中包含每个公司最后一次活动的日期。因此,如果我在2018-01-01
、2018-02-01
和2018-02-12
(在ActualEndDate列中)为A公司安排了三项活动,我想在其旁边增加一列,其中新列中2018-01-01的行为空,2018-02-01
为2018-01-01
,而2018-02-12
为2018-02-01
我不知道如何做到这一点,因为我不能简单地复制列并将所有值向上移动一个,因为它必须按照companyname进行
有人知道怎么做吗
我想要的是:
Companyname ActualEndDate PreviousDate
A 2018-01-01 null
A 2018-02-01 2018-01-01
A 2018-02-07 2018-02-01
B 2018-01-01 null
B 2018-02-01 2018-01-01
我所拥有的:
Companyname ActualEndDate
A 2018-01-01
A 2018-02-01
A 2018-02-07
B 2018-01-01
B 2018-02-01
我是SQL新手,如果我的解释不好,我很抱歉。最简单的解决方案是使用窗口函数-在您的例子中是
LAG()
如果您使用的是SQL Server,解决方案将是:
SELECT Companyname
,ActualEndDate
,LAG(ActualEndDate) OVER(PARTITION BY Companyname ORDER BY Companyname, ActualEndDate )
FROM yourTable
Oracle的链接:
SQL Server的链接:
MySQL的链接:
PostgreSQL的链接:最简单的解决方案是使用窗口函数-在您的例子中是
LAG()
如果您使用的是SQL Server,解决方案将是:
SELECT Companyname
,ActualEndDate
,LAG(ActualEndDate) OVER(PARTITION BY Companyname ORDER BY Companyname, ActualEndDate )
FROM yourTable
Oracle的链接:
SQL Server的链接:
MySQL的链接:
PostgreSQL的链接:LAG()
是正确答案。这是一个SQL标准函数,在大多数数据库中都可用
但是,典型的语法是:
SELECT Companyname, ActualEndDate,
LAG(ActualEndDate) OVER (PARTITION BY Companyname ORDER BY ActualEndDate) as PreviousDate
FROM yourTable;
没有理由重复顺序中的按
划分列LAG()
是正确的答案。这是一个SQL标准函数,在大多数数据库中都可用
但是,典型的语法是:
SELECT Companyname, ActualEndDate,
LAG(ActualEndDate) OVER (PARTITION BY Companyname ORDER BY ActualEndDate) as PreviousDate
FROM yourTable;
没有理由重复您使用的是哪些RDBMS中的排序依据列中的划分依据?SQL Server、Oracle等?您正在使用哪些关系数据库管理系统?SQL Server、Oracle……?非常感谢!不知道滞后函数。现在就知道了,谢谢:)@user11299833如果你觉得我的答案对你有帮助,你可以。非常感谢!不知道滞后函数。现在就知道了,谢谢:)@user11299833如果你觉得我的答案对你有帮助,你可以。