2

在静态表上,我试图在 SSMS 中运行以下查询(以获取每个用户的最新交易并将美元价值相加):

SELECT
    SUM(nMoney) As TotalMoney
FROM
(
    SELECT ROW_NUMBER() OVER (PARTITION BY nGroup, nUser ORDER BY dTransaction DESC) AS SEQNUM
    , nMoney
    FROM [MyDB].[dbo].[MyTable]
) MySubquery
WHERE MySubquery.SEQNUM=1

这是一个有 2,701,510 行的表,nMoney 列的类型是 Decimal(12,2)。当我多次运行它时,我得到了不同的结果:

2317367341.75
2317370443.45
2317449819.62
2317360649.43
2317449819.62

什么可能导致不一致的结果?

4

1 回答 1

5

对于浮点运算,数字相加的顺序会影响结果

但在这种情况下,您使用Decimal(12,2)的是精确的。

问题在于,重复值不是确定性nGroup, nUser, dTransaction的,因此不同的运行可能会返回不同的结果。ROW_NUMBER

要获得确定性行为,您可以将保证唯一的列添加到末尾ORDER BY以充当决胜局。

于 2013-08-28T23:12:11.143 回答