我有一个DD信息表,我需要从中选择任何已取消且没有后续活动记录的记录
我试过了
select
d1.DDIReference
FROM DDI d1
LEFT OUTER JOIN DDI d2 ON (d1.DDIReference = d2.DDIReference AND d1.TransactionID < d2.TransactionID)
INNER JOIN [TM113 File for Jo to Check] tm on tm.[DDI Reference] = d1.DDIReference
WHERE
d1.DDStatus = 'CAN'
AND d2.DDStatus <> 'ACT'
但是这将返回我可以取消,取消,取消,激活的记录的DDIReference。
我只想返回已取消但没有活动的记录。
由于
的Darren
答案 0 :(得分:1)
我并不完全确定我正确理解您的问题,但此查询会获取已取消的记录,其中不存在具有较高TransactionID
的有效记录。请注意,与原始查询一样,如果存在状态为CAN
的多个记录,则每个记录的结果中都会显示一行。在这种情况下,您可以使用SELECT DISTINCT
来避免这种情况。
SELECT d1.DDIReference
FROM DDI d1
INNER JOIN [TM113 File for Jo to Check] tm on tm.[DDI Reference] = d1.DDIReference
WHERE d1.DDStatus = 'CAN'
AND NOT EXISTS(
SELECT *
FROM DDI d2
WHERE d2.DDIReference = d1.DDIReference
AND d2.TransactionID > d1.TransactionID
AND d2.DDStatus = 'ACT')
答案 1 :(得分:0)
select
d1.DDIReference
FROM DDI d1
LEFT OUTER JOIN DDI d2 ON (d1.DDIReference = d2.DDIReference AND d1.TransactionID < d2.TransactionID)
INNER JOIN [TM113 File for Jo to Check] tm on tm.[DDI Reference] = d1.DDIReference
WHERE
d1.DDStatus = 'CAN'
AND d1.DDIReference not in (select DDIReference from DDIReference where DDStatus = 'ACT' )
答案 2 :(得分:0)
SELECT d1.DDIReference
FROM DDI d1 INNER JOIN [TM113 File for Jo to Check] tm on tm.[DDI Reference] = d1.DDIReference
OUTER APPLY (
SELECT TOP 1 d2.DDStatus
FROM DDI d2
WHERE d1.DDIReference = d2.DDIReference
AND d1.TransactionID < d2.TransactionID
ORDER BY d2.TransactionID DESC
) o
WHERE d1.DDStatus = 'CAN' AND o.DDStatus <> 'ACT'