目前我有一个交易清单如下:
Front Office ID Transaction ID TradeDate SettlementDate
10000 1234 2015-03-03 2015-03-04
10000 1235 2015-03-03 2015-06-17
10001 1232 2015-03-13 2015-03-18
10001 1231 2015-03-13 2015-06-17
我需要做的是查找每个前台办公室ID的交易ID,该交易ID在交易日期和结算之间的天数最短。
我知道如何获得日期差异,但我很困惑如何通过以下方式让它在小组中发挥作用:
MIN(DATEDIFF(DD,FX.TradeDate,FX.SettleDate))
正确的方向提供了任何帮助或指示。
感谢。
答案 0 :(得分:0)
您需要按照Front Office ID对其进行分组,然后按数据差异进行排序,您将获得最小值。
这样的事情:
SELECT id
FROM tbl
GROUP BY id
ORDER BY difference
答案 1 :(得分:0)
为什么您需要GROUP BY
如果您想要找到交易ID&每个Front Office ID ,其交易日期和交易日期之间的天数最短结算"
SELECT TOP 1 t.[Transaction ID]
FROM dbo.Transactions t
WHERE t.[Front Office ID] = @FrontOfficeID
ORDER BY DATEDIFF(DD, t.TradeDate, t.SettleDate) ASC
如果您想要为所有交易ID找到它,您可以使用CTE + ROW_NUMBER
:
WITH CTE AS
(
SELECT t.[Transaction ID], t.[Front Office ID], t.TradeDate, t.SettleDate
RN = ROW_NUMBER() OVER (PARTITION BY [Front Office ID]
ORDER BY DATEDIFF(DD, t.TradeDate, t.SettleDate) ASC)
FROM dbo.Transactions t
)
SELECT [Transaction ID], [Front Office ID], TradeDate, SettleDate
FROM CTE
WHERE RN = 1
如果您想要返回TradeDate和SettleDate之间时间间隔最短的所有交易ID(如果有关系),请使用DENSE_RANK
代替ROW_NUMBER
。
答案 2 :(得分:0)
您可以使用DefaultAppPool
并在ROW_NUMBER()
上执行PARTITION BY
。
[Front Office ID]