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 --------
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