0

私はこの小さな実体を持っています

class Order
{
    public long Id;
    public DateTime Date;
    public long ProductId;
}

でグループ化された注文の中Idからエンティティを選択したい。ペア(、)は一意ではないため、このクエリは間違っています。MAX(Date)ProductIdMAX(Date)ProductId

select o.Id 
from Order o 
where o.Date = 
   (select max(o2.Date) 
    from Order o2 
    where o2.ProductId = o.ProductId);

あなたはなにか考えはありますか?

基本的に私が欲しいのは、グループから最新の注文を取得することです。したがって、より大きいId==新しいと仮定すると、次のようになりOrderます。

select o 
from Order o 
where o.Id in 
   (select max(o2.Id) 
    from Order o2 
    group by o2.ProductId);

私のために働くでしょう。より良い解決策はありますか?

4

2 に答える 2

0

クエリを最適化する必要がありますが、うまくいきます。

List<Order> orders = GetOrders();

        var result = from o in orders
                      group o by new { o.ProductId } into ordGrouping
                      let MaxOrderDate = ordGrouping.Max(od=>od.Date)
                      let OrderID = ordGrouping.First(od=>od.Date.Equals(MaxOrderDate)).Id
                      select new 
                      { 
                          ProductId = ordGrouping.Key.ProductId, 
                          OrderId = OrderID,
                          OrderDate = MaxOrderDate
                      };

        foreach (var item in result)
        {
            Console.WriteLine(string.Format("Product ID:{0}, OrderId: {1} Date: {2}", item.ProductId, item.OrderId, item.OrderDate.ToLongDateString() + item.OrderDate.ToLongTimeString()));
        }
于 2012-10-31T12:27:12.683 に答える
0

パフォーマンスを向上させるためにクエリではなく自己結合を試してください。

于 2012-10-30T18:25:43.907 に答える