0
에 나는 MongoDB의에서이 같은 쿼리 뭔가를 작성해야 ROW_NUMBER()와 RANK() MongoDB를
(ProductID INT, ProductStartDate date, ProductExpDate date,
ProductTypeID int, #PacketsInProduct int,
Price int, Discount int, Score int)
스키마
이하와 제품의 테이블이 있습니다. 나는 C# 드라이버 1.5를 사용하고있다. RowNUMBER()가 두 번째 CTE에서 행을 필터링해야하는 순위를 기반으로 내 where 조건과 일치하는 제품 순위를 결정하는 첫 번째 CTE (Products_CTE)에서 문제가 발생합니다. 내 모든 조건이 역동적입니다. 누구든지 나를 도울 수 있습니까? 미리 감사드립니다.;WITH Products_CTE
AS
(
SELECT
ROW_NUMBER() OVER(PARTITION BY ProductID ORDER BY Score Desc, Price Asc) as RankByProduct,
*
FROM Products
WHERE
ProductID IN (1,2,3)
AND ProductTypeID IN (001,002)
AND [#PacketsInProduct] >3 and [#PacketsInProduct] <10
and ProductExpDate < GETDATE()
),
Products2_CTE
AS
(
SELECT
ROW_NUMBER() OVER (ORDER BY Score DESC, Price ASC) as rownum,
*
FROM Products_CTE
WHERE RankByProduct <= 3
)
SELECT
*
from Products2_CTE cte1
where rownum BETWEEN 15 AND 25
ORDER BY [Score] DESC, [Price] ASC
답변 해 주셔서 감사합니다. 나는 Map/Reduce를 시도했지만 그걸로 순위를 매기는 방법을 알아낼 수 없었다. 나는 이것을 실시간 웹 사이트에 구축하고 있는데, 순위 지정, 그룹화의 경우 Mongo DB를 제안하지 않겠습니까? 여기 캐 센들 라를 선택 하는게 어때요? 내 테이블의 스키마에 대해서는 매우 적은 수의 컬럼으로 구성된 평범한 테이블이며 스키마에서 변경 될 사항이나 코멘트가 보이지 않습니까? 다시 고마워 ... –
그래서, 왜 당신이 nosql 솔루션을 원하는 내 질문에 맞춰. 당신은 분명히 아주 작은 스키마를 가진 작업 솔루션을 가지고 있습니다. mongodb를 사용하려는 경우 쿼리 포인트에서 집계하는 대신 데이터가 비정규 화되고 변경 될 때 업데이트되도록 유지하는 것이 좋습니다. 이론적으로 계산이 필요 없으므로 매우 빠릅니다. –