0
我有以下模式ROW_NUMBER()和RANK()在MongoDB中
(ProductID INT, ProductStartDate date, ProductExpDate date,
ProductTypeID int, #PacketsInProduct int,
Price int, Discount int, Score int)
我需要編寫一個查詢像這樣在MongoDB中一個產品表。我正在使用C#驅動程序1.5。我在下面的第一個CTE(Products_CTE)中遇到了問題,其中Row_NUMBER()根據我需要篩選第二個CTE中的行的排名來決定產品排名,該排名與我的where條件相匹配。我的所有條件都是動態的,任何人都可以在這裏幫助我。在此先感謝
;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,但無法弄清楚如何獲得排名。我正在爲我的實時網站構建這個網站,在這種排名,分組的情況下,你會不會建議去MongoDB?如何選擇cassendra在這裏,會有幫助嗎?關於我的表的架構,它是一個列很少的普通表,我沒有看到架構中有什麼要改變,有什麼意見?再次感謝... – 2012-07-14 01:57:34
所以,我想我的問題是爲什麼你想要一個nosql解決方案。你顯然有一個非常小的模式的工作解決方案。 如果你想使用mongodb,你會這樣做的方式是保持數據非規範化和更新,因爲它改變,而不是在查詢點聚合。可以說,它會非常快,因爲不需要進行計算。 – 2012-07-14 13:49:11