Sql 选择在多个列上筛选的最新行
我有一个sql表Sql 选择在多个列上筛选的最新行,sql,sql-server,linq,ef-core-2.2,Sql,Sql Server,Linq,Ef Core 2.2,我有一个sql表 +------+-----------+-----------+--------+--------------+ | rowID| location | fk_Item_ID |Balance |Inventory_Date| +------+-----------+-----------+--------+--------------+ | 1 | 1 | p1 |500 |2019-01-10 | | 2 | 1
+------+-----------+-----------+--------+--------------+
| rowID| location | fk_Item_ID |Balance |Inventory_Date|
+------+-----------+-----------+--------+--------------+
| 1 | 1 | p1 |500 |2019-01-10 |
| 2 | 1 | p2 |450 |2019-01-05 |
| 3 | 2 | p2 |500 |2019-01-10 |
| 4 | 1 | p1 |300 |2019-01-15 |
| 5 | 1 | p1 |350 |2019-01-16 |
+------+-----------+-----------+--------+--------------+
我正在尝试编写一个SQL语句,或者最好是LINQ,以便按日期获取最新的行,然后获取每个位置每个部件的最大行数
从库存日志中选择*作为l1
哪里
罗维德在
从库存日志中选择MAXrowID
哪里
fk_项_ID=l1.fk_项_ID
和库存日期=
选择MAXInventory\u日期
从库存日志
其中,fk_项_ID=l1.fk_项_ID
按l1.fk\u项目\u ID订购
预期成果:
+------+-----------+-----------+--------+--------------+
| rowID| location | fk_Item_ID |Balance |Inventory_Date|
+------+-----------+-----------+--------+--------------+
| 2 | 1 | p2 |450 |2019-01-05 |
| 3 | 2 | p2 |500 |2019-01-10 |
| 5 | 1 | p1 |350 |2019-01-16 |
+------+-----------+-----------+--------+--------------+
我不确定如何为同一零件包含多个位置
它将进入下一节课
public class _ItemLocations
{
public string Item_ID { get; set; }
public string Location { get; set; }
public decimal Qty { get; set; }
}
我还没有在LINQ中尝试过,因为我正在用sql购买它在sql Server中,使用行号:
注意:我不清楚您希望rowID进行何种排序,因为您表示希望记录按库存日期排序:我将其用作第二种排序标准,因此如果需要,它将在库存日期打破顶部的联系
:
SELECT * FROM (
SELECT
i.*,
ROW_NUMBER() OVER(PARTITION BY location, fk_Item_ID ORDER BY Inventory_Date DESC, rowID DESC) rn
FROM Inventory_Log i
) x WHERE rn = 1
rowID | location | fk_Item_ID | Balance | Inventory_Date | rn
----: | -------: | :--------- | ------: | :------------------ | :-
2 | 1 | p2 | 450 | 05/01/2019 00:00:00 | 1
3 | 2 | p2 | 500 | 10/01/2019 00:00:00 | 1
5 | 1 | p1 | 350 | 16/01/2019 00:00:00 | 1