如何复制现有列,但所有值都为"一个单元格",但由不同的列分区?

  • 本文关键字:单元格 一个 分区 复制 何复制 sql
  • 更新时间 :
  • 英文 :


我正在用sql制作一个表格,其中包含所有已关闭的活动。我的一些专栏是CompanynameActualEndDate的。该表按"公司名称"和"实际结束日期"按顺序排序。

我想添加一个列,其中包含每个公司的上次活动的日期。因此,如果我在 2018-01-012018-02-012018-02-12(在 ActualEndDate 列中(为 A 公司有三个活动,我需要在它旁边增加一列,其中 2018-01-01 的行在新列中为 null,2018-02-012018-01-012018-02-12是 2018-02-01。

我不知道如何完成此操作,因为我不能简单地复制该列并将所有值向上移动一个,因为它必须按公司名称完成。

有没有人知道如何完成这项工作?

我想要什么:

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 标准函数,在大多数数据库中都可用。

但是,典型的语法是:

SELECT Companyname, ActualEndDate,
       LAG(ActualEndDate) OVER (PARTITION BY Companyname ORDER BY ActualEndDate) as PreviousDate
FROM yourTable;

没有理由在ORDER BY中重复PARTITION BY列。

最简单的解决方案是使用窗口函数 - 在您的情况下LAG()

如果您使用的是 SQL-Server,解决方案将是:

SELECT Companyname
      ,ActualEndDate
      ,LAG(ActualEndDate) OVER(PARTITION BY Companyname ORDER BY Companyname, ActualEndDate )
  FROM yourTable
甲骨文

链接:甲骨文中的 LAG

SQL

服务器链接:SQL-Server 中的 LAG

MySQL 链接:mySQL 中的 LAG

PostgreSQL的链接:Postgres中的窗口函数

相关内容

最新更新