Мне кажется, у меня наконец-то есть рабочий запрос для моей ситуации сегодня. Я стараюсь выбрать максимальную дату для нескольких таблиц на основе UserID + VendorID
. (Затем обновите каждый LastActivityAt в соответствии с UserID
.
. Однако, как только я введу MAX()
в PageStatistics
, который может содержать много записей, так как это текущий журнал (по сути, пользовательская активность), мой запрос переходитот <1 с до ~ 30 секунд. </p>
Какие-либо предложения о том, как я могу улучшить это или переписать все это быстрее?
--UPDATE [UserRoleMappings] SET LastActivityAt =
--(
SELECT UserID, MAX(CheckDate) AS MaxDate
FROM (
SELECT urm.UserID, (
SELECT Max(v)
FROM (VALUES
(urm.LastLoginAt), (u.UpdatedAt), (u.CreatedAt), (b.CreatedAt), (o.CreatedAt),
((
SELECT MAX(CreatedAt)
FROM [PageStatistics] ps
WHERE ps.TriggerUserID = u.ID
AND ps.AppID = a.ID
))
) AS value(v)
) AS CheckDate
FROM [UserRoleMappings] urm
INNER JOIN [Users] u ON u.ID = urm.UserID
INNER JOIN [Vendors] v ON v.ID = urm.VendorID
INNER JOIN [Apps] a ON v.ID = a.VendorID
INNER JOIN [Bookings] b ON v.ID = b.VendorID
INNER JOIN [Orders] o ON v.ID = o.VendorID
) foo
GROUP BY UserID
--)
Кроме того, не знаю, как я идучтобы вернуть это в ОБНОВЛЕНИЕ ... так как я не могу выбрать два столбца!