如何使用查询表达式为每个项目选择最后 n 条历史记录



我需要使用 Microsoft XRM sdk 查询表达式通过 Windows 服务查询 SQL 数据库,我遇到了一个要求,我必须为每个项目选择最后 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 个价格变化历史的产品列表(价格和日期变化(可以分组为 C# IEnumerable 如下:

产品

  • 编号 : 数字
  • 描述 : 字符串
  • 价格更改最后十预览 [] : 对象数组
在一个查询

中查询表达式是否可以做到这一点,或者我是否必须诉诸按记录进行查询?

请帮忙

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

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

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

最新更新