审计表如下所示:
Audit ID VendorID PaymentType CreateDateUTC
999 8048 2 2017-10-30-08:84:24
1000 1234 5 2017-10-31-01:17:34
1001 8048 7 2017-10-31-01:17:45
1002 1234 5 2017-10-31-01:17:53
1003 1234 7 2017-10-31-01:18:23
1004 1234 5 2017-11-01-01:18:45
在这个例子中,你可以看到说 - VendorID 1234 开始为 PaymentType 5,然后有另一个条目,它仍然是 5(审计表记录了与我的查询无关的其他更改),然后它更改为 7,但又回到 5 .
假设我想回答这个问题:“从现在到日期 X,这些 VendorID 的 PaymentType 发生了变化”。奖金是 - 这是以前的 PaymentType。
预期成绩:
VendorID PaymentType Prev_PaymentType
8048 7 2
因此,如果我在现在和 10-31-01:00:00 之间进行查询,我希望它返回 VendorID 8048 已更改(作为奖励,它以前的 PaymentType 为 2),但 VendorID 1234 不应该出现,因为在 2017-10-31-01:00:00 它是 5,现在仍然是 5,尽管有间歇性的变化。
如何查询付款类型在 2 个日期之间发生变化的 VendorID?
谢谢!
这是我证明有用的替代方法,使用 OUTER APPLY。请注意,AuditID 列用作决胜局主要是因为示例数据没有日期时间值。
CREATE TABLE AuditTable (
AuditID int
, VendorID int
, PaymentType int
, CreateDateUTC date
);
INSERT INTO AuditTable
VALUES (999, 8048, 2, '2017-10-30'),
(1000, 1234, 5, '2017-10-31'),
(1001, 8048, 7, '2017-10-31'),
(1002, 1234, 5, '2017-10-31'),
(1003, 1234, 7, '2017-10-31'),
(1004, 1234, 5, '2017-11-01');
查询 1:
select
*
from AuditTable a
outer apply (
select top(1) PaymentType, CreateDateUTC
from AuditTable t
where a.VendorID = t.VendorID
and a.CreateDateUTC >= t.CreateDateUTC
and a.AuditID > t.AuditID
order by CreateDateUTC DESC, AuditID DESC
) oa (PrevPaymentType, PrevDate)
order by
vendorid
, CreateDateUTC
结果:
| AuditID | VendorID | PaymentType | CreateDateUTC | PrevPaymentType | PrevDate |
|---------|----------|-------------|---------------|-----------------|------------|
| 1000 | 1234 | 5 | 2017-10-31 | (null) | (null) |
| 1002 | 1234 | 5 | 2017-10-31 | 5 | 2017-10-31 |
| 1003 | 1234 | 7 | 2017-10-31 | 5 | 2017-10-31 |
| 1004 | 1234 | 5 | 2017-11-01 | 7 | 2017-10-31 |
| 999 | 8048 | 2 | 2017-10-30 | (null) | (null) |
| 1001 | 8048 | 7 | 2017-10-31 | 2 | 2017-10-30 |
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句