sql - SQL Server 查找数据更改前的行
问题描述
我有一组数据,其中可能有 2 条数据可以更改。
SerNo和Condition。_
我需要能够检测到哪个首先更改并返回更改上方的行。
在下面的示例中:
- 条件变化@
TransID = 5
- SerNo更改@
TransID = 7
由于条件首先发生变化,我需要返回上面的行TransID = 4
。
转号 | 部分 | 序列号 | IN_Nr | OUT_Nr | 订单号 | 类型 | 健康)状况 |
---|---|---|---|---|---|---|---|
1 | 123-1 | abc123 | 232753 | 232233 | 888777 | 出去 | 新的 |
2 | 123-1 | abc123 | 232753 | 无效的 | 125707 | 在 | 新的 |
3 | 123-1 | abc123 | 203944 | 224789 | 125707 | 出去 | 新的 |
4 | 123-1 | abc123 | 203944 | 无效的 | 123332 | 在 | 新的 |
5 | 123-1 | abc123 | 179409 | 198306 | 123332 | 出去 | 老的 |
6 | 123-1 | abc123 | 179409 | 无效的 | 111222 | 在 | 老的 |
7 | 123-1 | cba999 | 176573 | 171516 | 111222 | 出去 | 老的 |
8 | 123-1 | cba999 | 176573 | 无效的 | 666000 | 在 | 老的 |
我尝试使用ROW_NUMBER()OVER(PARTITION BY Condition
... 来解决这个问题,并为 SerNo 做另一个 ROW_NUMBER() 然后聚合数据,但我似乎无法在它第一次更改时进行过滤。
SELECT
*,
CASE WHEN (ROW_NUMBER()OVER(PARTITION BY Condition ORDER BY TransID ASC)) > 1 THEN 1 ELSE 2 END Condition_Change,
CASE WHEN (ROW_NUMBER()OVER(PARTITION BY SerNo ORDER BY TransID ASC)) > 1 THEN 1 ELSE 2 END SerNo_Change
FROM
StkTrans
CREATE TABLE StkTrans (
TransID INT,
Part VARCHAR(25),
SerNo VARCHAR(25),
IN_Nr INT,
OUT_Nr INT,
OrderNr INT,
Type VARCHAR(3),
Condition VARCHAR(5)
)
INSERT INTO StkTrans
(TransID, Part, SerNo, IN_Nr, OUT_Nr, OrderNr, Type, Condition)
VALUES
(1, '123-1', 'abc123', 176573, NULL, 666000, 'IN', 'NEW' ),
(2, '123-1', 'abc123', 176573, 171516, 111222, 'OUT', 'NEW' ),
(3, '123-1', 'abc123', 179409, NULL, 111222, 'IN', 'NEW' ),
(4, '123-1', 'abc123', 179409, 198306, 123332, 'OUT', 'NEW' ),
(5, '123-1', 'abc123', 203944, NULL, 123332, 'IN', 'OLD' ),
(6, '123-1', 'abc123', 203944, 224789, 125707, 'OUT', 'OLD' ),
(7, '123-1', 'cba999', 232753, NULL, 125707, 'IN', 'OLD' ),
(8, '123-1', 'cba999', 232753, 232233, 888777, 'OUT', 'OLD' )
解决方案
您可以使用lead()
. 我不确定你在问什么。但是要在条件更改之前获取行:
select t.*
from (select t.*,
lead(condition) over (partition by part order by transid) as next_condition
from t
) t
where next_condition <> condition;
为其他列添加条件也很简单。
推荐阅读
- javascript - 在 List onclick 事件中添加数据
- c# - 不同View的ViewModel Initialize方法
- angularjs - Angular orderby在加载的订单中排序
- android - 颤振:InternalLinkedHashMap
' 没有具有匹配参数的实例方法 'cast' - java - JAVAFX 11 不支持 ECMAScript6 和 css3
- python - 如何验证 Amazon 开发人员门户中的内置插槽值?
- angular - 从 api 向我的 FormArray 添加数据时获取额外的表单 controlName
- android - 启用 webview 从网站播放 HLS 流
- nginx - 子域不适用于 Nginx 虚拟主机
- apache-spark - 减去一个空数据框返回的计数与原始数据不同