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

我有一个sql表

+------+-----------+-----------+--------+--------------+
| 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