1

与我之前的问题相关:如何插入每两个后续行的减法并将其插入新列

我有另一个问题。在下表中;我想计算每个用户最后一次赢得比赛所经过的时间。事实上,我应该从当前日期中减去最后一个中奖日期。(place=1) 表示获胜。

当前表:

http://www.8pic.ir/images/75206897877200828586.jpg

我想要的结果:

http://www.8pic.ir/images/78832309907063712878.jpg

我为这个问题写了以下查询(根据我在这里的上一个问题得到的答案)!但问题是我得到了很多重复的行!我只有 4000 行,但是当我运行这个查询时,我得到了 40,000 行!问题是什么!你能帮帮我吗?而且我对以前没有赢过的用户也有负值。我希望这些字段为 NULL。

;WITH [cte15853354] AS
 (
    SELECT 
        [user-name],
        [submissions],
        [date],
        [place],
        [recency],
        ROW_NUMBER() OVER (ORDER BY [user-name], [date] DESC) AS [ROWNUMBER]
    FROM dbo.[top-design1]
 )
SELECT 
    t.[user-name],
    t.[submissions],
    t.[date],
    t.[place],
    t.[recency],
    DATEDIFF(DAY, ISNULL(k.[date],t.[date]),t.[date]) AS [win-recency]
INTO dbo.[top-design2]
FROM [cte15853354] t
LEFT JOIN [cte15853354] k
    ON k.[user-name] = t.[user-name] 
     where k.[place]=1 
    ORDER BY t.[user-name], t.[date] DESC
4

1 回答 1

1

你去了(实际上不需要案例测试):

SELECT [user-name], 
       submissions,
       [date],
       place,
       recency,
       DATEDIFF(DAY, 
       (SELECT TOP(1) [date]
        FROM [top-design1] td1
        WHERE td1.[user-name] = [top-design1].[user-name]
        AND place = 1
        AND [date] < [top-design1].[date]
        ORDER BY [date] DESC), [date]) as recencywin
FROM [top-design1]

我想您可以自己管理以将其用于插入目的。

于 2013-04-09T08:33:41.707 回答