我找不到一个与我想要做的事情相匹配的场景。
我有一个表,其中包含UserID、他们的SubscriptionPackageID和他们的Subscription日期。
用户ID 14525398:的#订阅示例数据
UserID Package Date
14525398 188535 2011-05-17 00:00:00.000
14525398 188535 2011-06-16 00:00:00.000
14525398 188536 2011-06-23 00:00:00.000
在上面的例子中,此人于6月16日订阅了PackageID 188535。6月23日,他们升级到PackageID 188536。
在另一个表中,我有他们的下载历史记录,但我想做的是导出他们在下载日期订阅的PackageID。这个下载表有UserID、Number of Downloads、download Date和PackageID,但没有我需要更新的值。
#下载表的示例数据为:
UserID Dloads Date PackageID
14525398 3 2011-06-18 00:00:00.000 0
14525398 2 2011-06-18 00:00:00.000 0
14525398 2 2011-06-19 00:00:00.000 0
14525398 5 2011-06-24 00:00:00.000 0
14525398 2 2011-06-18 00:00:00.000 0
使用上面的例子,我需要一个查询,它准确地显示第四条记录(5次下载记录(在PackageID 188536上,因为这是2011-06-24下载日期之前的最新包,而其余的将在PackageID 188 535上。
我试着这样更新:
UPDATE #Download SET PackageID = (
SELECT TOP 1 PackageID
FROM #subscription
WHERE userID = #Download.userID AND Date <= #Download.Date
)
然而,这只是不准确地将他们全部设定为188535人。如前所述,2011-06-24上的下载应该设置为PackageID188536。
如有任何协助,我们将不胜感激。SQL Server 2008。
UPDATE #Download SET PackageID = (
SELECT TOP 1 PackageID
FROM #subscription
WHERE userID = #Download.userID AND Date <= #Download.Date
order by Date desc
)
我认为它应该起作用。。。
由于您需要选择正确的订阅,我在where子句中添加了datediff,以便您选择与下载日期相比最近的订阅日期
UPDATE #Download SET PackageID = (
SELECT TOP 1 PackageID
FROM #subscription
WHERE userID = #Download.userID
AND datediff(Date,#Download.Date) > 1
orderby datediff(Date,#Download.Date)
)