如何使用查询表达式 select 每个项目的最后 n 个历史记录

How to select last n historic records per item using Query Expressions

我需要使用 Microsoft XRM sdk 查询表达式通过 windows 服务查询 SQL 数据库,我遇到了一个要求,我必须 select 每个项目的最后 n 个历史记录像这样翻译成 SQL:

SELECT 
RecentPrices.ProductId, 
Product.[Description], 
RecentPrices.Price, 
RecentPrices.DateChanged 
FROM 
( 
    SELECT 
        ProductId, 
        Price, 
        DateChanged, 
        Rank() over 
        ( 
            Partition BY ProductId 
            ORDER BY DateChanged DESC 
        ) AS Rank 
    FROM PricingHistories 
) RecentPrices 
JOIN ProductMaster Product 
ON RecentPrices.ProductId = Product.Id 
WHERE Rank <= 10 

它应该输出具有最近 10 个价格变化历史的产品列表(Price 和 DateChange) 可以将其作为 C# IEnumerable 分组为:

产品

这甚至可以在一个查询中使用查询表达式,还是我必须求助于按记录查询?

请帮忙

如果检索到所有的价格变动记录,则可以对它们进行分组,然后每个分组Take(10)

如果您有截止日期而不是前 10 名,您可以查询该日期之后的所有价格变化,然后将它们分组。

如果您只想检索每条记录的前 10 条记录,我认为您必须按记录进行查询。您可能想考虑使用 ExecuteMultiple 来批处理查询。