Как выбрать последние n исторических записей для каждого элемента, используя выражения запроса - PullRequest
0 голосов
/ 13 июня 2019

Мне нужно использовать Microsoft XRM sdk Query Expression для запроса базы данных SQL через службу Windows, и я столкнулся с требованием, что я должен выбрать последние 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 для чего-то вроде:

Product

  • Id: number
  • Описание: строка
  • PriceChangesLastTenPreview []: массив объектов

Возможно ли это даже для выражений запросов в одном запросе, или мне придется прибегать к запросам для каждой записи?

помогите пожалуйста

1 Ответ

0 голосов
/ 13 июня 2019

Если вы извлекаете ВСЕ записи об изменении цены, вы можете сгруппировать их, затем Take(10) из каждой группировки.

Если у вас была дата среза, а не топ-10, вы могли бы запросить все изменения цены после этогоДата, а затем сгруппировать их.

Если вы хотите получить только первые 10 для каждой записи, я думаю, вам придется запрашивать каждую запись.Возможно, вы захотите использовать ExecuteMultiple для пакетной обработки запросов.

...