如何解决根据给定数量和价格的最新日期,找到产品的最低和最高单价EF核心
所以基本上我有一个如下表:
+----+-----------+---------+-------+-------+------------+
| ID | ProductID | ShopID | Amount| Price | AddedDate |
+----+-----------+---------+-------+-------+------------+
| 1 | 1 | 1 | 1000 | 220 | 2020-07-01 |
| 2 | 1 | 1 | 1000 | 230 | 2020-07-30 |
| 3 | 1 | 1 | 100 | 21 | 2020-07-10 |
| 4 | 1 | 1 | 100 | 22 | 2020-07-31 |
| 5 | 1 | 2 | 100 | 23 | 2020-07-10 |
| 6 | 1 | 2 | 100 | 20 | 2020-07-12 |
只需找到一个产品的最低价格,
lowestUnitPrice = product.Sales.Min(s => s.Price / s.Amount)
最高价highestUnitPrice = product.Sales.Max(s => s.Price / s.Amount)
但是,正如您所看到的,我正在保留价格历史记录。因此,为了确定最低的最新单价,我只需要使用给定金额的最新条目。在上表中,它应该丢弃ID为1的行,因为ID为2的行具有相同的数量,但是更新的AddedDate。
我正在尝试通过单个查询找到解决方案,但我认为这是不可能的。我认为在SQL中找到最低的单价应该是这样,因为此处的表Sales是特定产品的销售额。
SELECT MIN(Price / Amount)
FROM productsales
WHERE (ProductID,AddedDate) IN
(SELECT ProductID,max(AddedDate)
FROM productsales
GROUP BY ProductID,ShopID,Amount
)
上表的预期输出对于最低的单价为0.20(第6行),对于最高的单价为0.23(第2行)。
此处的SQL演示:http://sqlfiddle.com/#!9/be74da/2
解决方法
一种实现方法是
var query = from p1 in products
where
(from p2 in products
group p2 by new { p2.ShopID,p2.Amount } into g
select (g.Max(p2 => p2.AddedDate))
).Contains(p1.AddedDate)
select (p1.Price / p1.Amount);
decimal lowestPrice = query.Min();
decimal highestPrice = query.Max();
不知道它可以做得更短或更有效吗?
可在此处找到示例:https://dotnetfiddle.net/MRJzHs
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。