Bar*_*ral 0 sql-server sql-server-2008
我有一个包含数百万笔交易的表.我需要找到收入最高的当前金额."当前"定义为在最后一次取消的交易之后发生.表格如下:
Id (guid) ServiceId CreatedDate AmountPaid InsurerId IsCanceled
76E9A3... 19 2013-08-30 12:34:01.580 56.00 96 0
C3F325... 19 2013-08-30 12:34:02.069 14.95 110 0
96E9A3... 19 2013-08-30 12:32:01.540 109.00 95 1
C3BC25... 19 2013-08-30 12:32:02.007 15.95 108 1
85E9A3... 19 2013-08-30 12:30:01.701 101.00 95 0
A3F325... 19 2013-08-30 12:30:02.069 13.95 108 0
Run Code Online (Sandbox Code Playgroud)
如您所见,对于相同的serviceID,我有多个事务.我需要在这里检索的是$ 56交易,因为在同一ServiceID的最近取消交易之后,它是该ServiceId的最高交易.
如果我做:
ORDER BY CreatedDate DESC, AmountPaid DESC
Run Code Online (Sandbox Code Playgroud)
第一行将是14.95美元的交易......
如果我做:
ORDER BY AmountPaid DESC, CreatedDate DESC
Run Code Online (Sandbox Code Playgroud)
第一行是101 $交易
更多信息:
取消服务交易后,任何交易都将失效.唯一有效的交易是在取消的交易之后创建的交易.
;WITH m AS
(
SELECT ServiceID, m = MAX(CreatedDate)
FROM dbo.whatever
WHERE IsCanceled = 1 GROUP BY ServiceID
),
n AS
(
SELECT w.*,
rn = ROW_NUMBER() OVER (PARTITION BY w.ServiceID ORDER BY w.AmountPaid DESC)
FROM dbo.whatever AS w
LEFT OUTER JOIN m ON w.ServiceID = m.ServiceID
WHERE w.CreatedDate > COALESCE(m.m, '19000101')
)
SELECT * FROM n WHERE rn = 1;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |