我有这个小实体
class Order
{
public long Id;
public DateTime Date;
public long ProductId;
}
我想在Id
分组的订单中选择MAX(Date)
个实体ProductId
。
配对(MAX(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);
对我有用。有没有更好的解决方案?
答案 0 :(得分:0)
在查询中尝试自联接而不是,以获得更好的效果。
答案 1 :(得分: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()));
}