У меня есть этот запрос, когда я выбираю записи из таблицы базы данных SQL Server, в которой хранятся все продукты, которые просматривали пользователи нашего сайта (ProductRecentlyViewed
таблица).
Я пытаюсь выбратьтолько записи с уникальным rv.productvariantid
(я хочу, чтобы он возвращал только один из каждого варианта продукта, который просматривал пользователь).
Я пытался использовать ключевое слово DISTINCT
, но мне также нужен DateCreated
для orderby, и поскольку он отличается в записях с одинаковым rv.productvariantid
, я не могу использовать DISTINCT
.
Что я могу сделать вместо этого, чтобы получить 20 новейших уникальных вариантов продукта, которые просматривал пользователь? Вот мой текущий запрос SQL, который выбирает все варианты продукта, которые просматривал пользователь, и, к сожалению, он показывает их более одного раза, если пользователь просматривал их более одного раза.
SELECT TOP 20
rv.productId,
p.productNameNO as productName,
picid,
picurl,
rv.productRecentlyViewedId,
rv.dateCreated,
rv.lang,
rv.isUserLoggedIn,
rv.userId,
rv.productVariantId
FROM
ProductRecentlyViewed rv
INNER JOIN
Product AS p ON rv.productid = p.productid
LEFT JOIN
(SELECT
productid,
picurl,
picid,
ROW_NUMBER() OVER (PARTITION BY productid ORDER BY isfrontpic DESC) rn
FROM
productpic) c ON c.rn = 1
AND rv.productId = c.productId
WHERE
rv.lang = 'NO'
AND rv.cookieId = CONVERT(uniqueidentifier, '1f102c74-278b-430e-8129-1261dfc7e2ac')
ORDER BY
rv.dateCreated