Я пытаюсь создать сложный запрос SQL Server для выбора конкретных данных. Во-первых, позвольте мне дать вам некоторую справочную информацию ...
Я использую базу данных, в которой мне нужно достичь 3 таблиц, используя этот запрос. Вы можете увидеть диаграмму на картинке. Как видите, в этой базе данных есть пользователи. Эти пользователи могут купить подписку, чтобы использовать некоторые общественные велосипеды по городу. Подписка имеет тип подписки. Этот тип подписки объявляет, как долго действительна подписка. Это может быть на день, месяц или год. Пользователь может иметь несколько подписок.
В моем запросе мне нужно выбрать идентификатор пользователя, имя, адрес, состоящий из улицы, номера, почтового индекса, города и кода страны, а также описание типа подписки. Для каждого пользователя мне нужна только самая длинная подписка. поэтому вам нужно отфильтровать запрос по subscriptionTypeId DESC. но не только это ... у пользователя может быть несколько подписок одного и того же типа, поэтому мне нужна только самая последняя. Это означает, что я также должен фильтровать ValidFrom DESC, самый длинный во время подписки.
Я знаю, что для этого мне нужно использовать подзапрос, но, похоже, не могу найти достойный запрос, который работает ... Это то, как далеко я продвинулся, но я использовал несколько методов, чтобы попытатьсяполучите то, что мне нужно:
SELECT
su.userId, u.name, u.street, u.number, u.zipcode, u.CountryCode, st.description,
MAX(su.validFrom) AS MaxValidFrom,
(SELECT MAX(SubscriptionTypeId) FROM dbo.Subscriptions
WHERE UserId = su.UserId) AS MaxSubscriptionTypeId
FROM
dbo.Users u
INNER JOIN
dbo.Subscriptions su ON u.userId = su.userId
INNER JOIN
dbo.SubscriptionTypes st ON su.subscriptionTypeId = st.subscriptionTypeId
HAVING
su.SubscriptionTypeId = MAX(su.SubscriptionTypeId)
ORDER BY
su.UserId, MaxValidFrom DESC;
Заранее спасибо за помощь!
Joren