Sql 基于changelog创建起始/截止日期列

Sql 基于changelog创建起始/截止日期列,sql,sql-server,pivot,Sql,Sql Server,Pivot,简要回顾我目前的情况: 我希望合并两个单独的日志文件,以便在另一个日志时获得一个日志的值 我有两张桌子 价格调整 换算系数调整 为了计算给定的价格,在统一的计量单位(UOM)中,我们使用换算系数作为乘数 例如,1box(换算系数)*200(价格)=100件(换算系数)*2(价格) 数据中的price和conversion factor字段都有类似的日志 Date Part_No Supplier_Id Old_Value New_Value --------

简要回顾我目前的情况: 我希望合并两个单独的日志文件,以便在另一个日志时获得一个日志的值

我有两张桌子

  • 价格调整
  • 换算系数调整
  • 为了计算给定的价格,在统一的计量单位(UOM)中,我们使用换算系数作为乘数

    例如,1box(换算系数)*200(价格)=100件(换算系数)*2(价格)

    数据中的price和conversion factor字段都有类似的日志

         Date      Part_No   Supplier_Id   Old_Value   New_Value  
     ------------ --------- ------------- ----------- ----------- 
      11-09-2019   A         B                     1           5  
      19-09-2019   A         B                     5           1
    
    名为LOG_ID的列是唯一的整数,因为可以在同一天进行多次更改

    我希望将表转换为可以使用from/to-date连接在一起的内容

    因此,我想要的输出如下所示(请注意,第一行有一个静态From_Date,最后一行有currentdate as To_Date)

      Part_No   Supplier_Id   From_Date     To_Date     Value  
     --------- ------------- ------------ ------------ ------- 
      A         B             01-03-2010   10-09-2019       1  
      A         B             11-09-2019   18-09-2019       5  
      A         B             19-09-2019   23-10-2020       1 
    

    我认为需要一个结合循环的枢轴功能,但我不太清楚如何结合这两个功能来识别今天之前所做的更改,一直到结束日期。

    您需要利用UNPIVOT,然后领导功能来实现这一点:

    DECLARE@table表(dateval日期,partno字符(1),supplierid字符(1),
    旧值int,新值int)
    插入@table
    价值观
    ('2019-09-11','A','B',1,5),
    ('2019-09-19','A','B',5,1);
    选择partno、supplierid、dateval作为起始日期,
    截至日期的isnull(dateadd(dd,-1,lead(dateval)超过(按零件号划分,按dateval划分供应商ID订单)),dateval,val
    来自@table
    unpivot
    (
    瓦尔
    对于键入([旧值],[新值])
    )作为upvt
    其中keyv=‘旧_值’
    

    根据之前对这个问题的回答,我已经走到了这一步

    SELECT
        Part_No,
        Supplier_Id,
        Date AS From_Date,
        ISNULL(DATEADD(dd,-1,lead(Date) OVER (PARTITION BY Part_No, Supplier_Id ORDER BY Date)),Date) AS To_date,
        New_Value
    
    FROM
        data_Table
    
    这将产生以下输出

        Part_No     Supplier_Id   From_Date     To_date     New_Value  
     ------------- ------------- ------------ ------------ ----------- 
      1032515-001          5277   11-09-2019   18-09-2019           5  
      1032515-001          5277   19-09-2019   19-09-2019           1 
    
    毫无疑问,正如我在原始问题中所解释的,这并不是我想要的。下表显示了我想要的输出:

      Part_No   Supplier_Id   From_Date     To_Date     Value  
     --------- ------------- ------------ ------------ ------- 
      A         B             01-03-2010   10-09-2019       1  
      A         B             11-09-2019   18-09-2019       5  
      A         B             19-09-2019   23-10-2020       1 
    

    静态第一个起始日期,当前日期作为动态最后一个起始日期

    这不是我想要的unfourtunately@HenrikPoulsen,2019-10-23如何进入画面?我们在测试数据中没有这个值,正如我在原始帖子中提到的,最后一行应该总是从日志文件的最后一个条目开始,直到当前日期(在我最初发帖时,这是2019-10-23)
      Part_No   Supplier_Id   From_Date     To_Date     Value  
     --------- ------------- ------------ ------------ ------- 
      A         B             01-03-2010   10-09-2019       1  
      A         B             11-09-2019   18-09-2019       5  
      A         B             19-09-2019   23-10-2020       1