【发布时间】:2013-07-02 13:24:14
【问题描述】:
我有一个查询需要提高效率。
我将其分解为几个部分以查看效率底线在哪里,我目前有一些嵌套选择语句,这些是性能问题吗?
这是其中之一的示例:
SELECT AgreementID,
DueDate,
UpdatedAmountDue AS AmountDue,
COALESCE((SELECT SUM(UpdatedAmountDue)
FROM RepaymentBreakdown AS B
WHERE CONVERT(datetime, CONVERT(varchar, DueDate, 103), 103) <=
CONVERT(datetime, CONVERT(varchar, R.DueDate, 103), 103)
AND B.AgreementID = R.AgreementID),0) AS DueTD,
RN=ROW_NUMBER() OVER (Partition BY R.AgreementID ORDER BY DueDate)
FROM RepaymentBreakdown AS R
有没有更干净高效的方式获取DueTD的数据?
基本上,对于还款计划结果的每一行,我想得到:
AgreementID,
DueDate,
AmountDue,
AmountDueToDate (DueTD)
RowNumber.
我查询的表结构如下:
AgreementID (int),
DueDate (datetime),
AmountDue (decimal(9,2)),
UpdatedAmountDue (decimal(9,2))*
*UpdatedAmountDue 总是被引用,因为它是移动的图形,AmountDue 总是固定的,作为一个参考值。
【问题讨论】:
-
您似乎可以在stackoverflow.com/questions/860966/… 找到有用的提示,您的
DueDate专栏中有哪些日期? (AgreementID , DueDate) 是唯一的吗? -
嗨 Roman,谢谢你的链接,我会看看那个......我的数据,
DueDate包含格式化的日期:> '2012-08-24 00:00:00.000' , 协议 ID 和到期日期始终是唯一的,因为协议每天只能支付 1 次。 -
最后一个问题 - 您的 DueDate 是连续的还是可能有间隔?
-
日期会有间隔,从 1 周到 1 个月不等。
标签: performance sql-server-2008 query-performance