我无法完全找到与我想做的事情相匹配的方案。

我有一个表,其中包含UserID,其Subscription PackageID和其Subscription日期。

用户ID为14525398的#Subscription的样本数据:

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日订阅了PackageID188535。在6月23日,他们升级到PackageID 188536。

在另一个表中,我有他们的下载历史记录,但是我想做的是得出他们在下载之日订阅的PackageID。此下载表包含用户ID,下载次数,下载日期和PackageID,没有我需要更新的值。

#Download表的样本数据为:

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下载日期之前的最新软件包,而其余的将在软件包ID 188535。

我试图这样更新:

UPDATE #Download SET PackageID = (
SELECT TOP 1 PackageID
FROM #subscription
WHERE userID = #Download.userID AND Date <= #Download.Date
)


但是,这只是将它们全部设置为不正确的188535。如上所述,应将2011-06-24的下载设置为PackageID 188536。

任何帮助将不胜感激。 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
)


我认为应该可以...

10-08 04:34