Я не мог найти сценарий, который соответствовал бы тому, что я пытаюсь сделать.
У меня есть одна таблица, в которой хранится идентификатор пользователя, идентификатор пакета подписки и дата подписки.
Пример данных для #Subscription for userID 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
В приведенном выше примере 16 июня этот человек подписался на PackageID 188535. 23 июня он обновился до PackageID 188536.
В другой таблице у меня есть история загрузок, но я пытаюсь выяснить, на какой 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, тогда как остальная часть была бы в PackageID 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.