如何从SQL Server中的重复行中获取最后一行?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从SQL Server中的重复行中获取最后一行?相关的知识,希望对你有一定的参考价值。
我有一个SQL查询来检索以前的日期记录。我想从重复行中选择最后一条记录,我该怎么做? 我的查询如下。
Declare @previous datetime
Set @previous = (select dateadd(day, -1, '20180216'))
select MstSmartItemLedger.smartitemid,MstSmartItemLedger.ItemCode,Balanceqty
from MstSmartItemLedger
where (CONVERT(Nvarchar, MstSmartItemLedger.SDate, 112) = @previous)
我得到了这样的结果
smartitemid itemcode balanceqty
802 1141 -3
803 118 -13
804 1110 -24
805 112 -21
806 115 -24
807 11141 -5
808 1127 -21
809 1129 -4
810 11129 -181
811 1139 -179
812 1134 -32
813 11103 -3
814 1199 -6
815 11102 -7
816 11129 -183
817 1188 -18
818 1189 -11
819 1139 -180
820 117 -43
821 114 -34
822 1155 -20
823 11140 -58
824 1188 -22
825 1188 -22
826 1111 -11
如上面的结果有两行商品代码11129所以我想要smartitemid 816的最后一条记录。我想要的结果如下
smartitemid itemcode balanceqty
802 1141 -3
803 118 -13
804 1110 -24
805 112 -21
806 115 -24
807 11141 -5
808 1127 -21
809 1129 -4
812 1134 -32
813 11103 -3
814 1199 -6
815 11102 -7
816 11129 -183
818 1189 -11
819 1139 -180
820 117 -43
821 114 -34
822 1155 -20
823 11140 -58
825 1188 -22
826 1111 -11
我怎样才能得到这个结果?请帮忙
答案
使用GROUP BY
子句与max()
..min()
聚合函数
SELECT
MAX(smartitemid) smartitemid, itemcode, MIN(balanceqty) balanceqty
FROM MstSmartItemLedger m
WHERE CONVERT(varchar, SDate, 112) = @previous
GROUP BY itemcode
ORDER BY 1
可能查找表也很有用
SELECT m.*
FROM MstSmartItemLedger m
INNER JOIN (
SELECT MAX(smartitemid) smartitemid
FROM MstSmartItemLedger
WHERE CONVERT(varchar, SDate, 112) = @previous
GROUP BY itemcode
)a ON a.smartitemid = m.smartitemid
另一答案
试试这个:
Declare @previous datetime
Set @previous = (select dateadd(day, -1, '20180216'))
SELECT MstSmartItemLedger.smartitemid,MstSmartItemLedger.ItemCode,Balanceqty
FROM MstSmartItemLedger
WHERE MstSmartItemLedger.smartitemid IN(
select MAX(MstSmartItemLedger.smartitemid)
from MstSmartItemLedger
where (CONVERT(Nvarchar, MstSmartItemLedger.SDate, 112) = @previous)
GROUP BY MstSmartItemLedger.ItemCode
)
另一答案
如果您将其分组到商品代码上并使用max smartitemid,您应该根据需要获取列表
Declare @previous datetime
Set @previous = (select dateadd(day, -1, '20180216'))
select MAX(MstSmartItemLedger.smartitemid) smartitemid, MstSmartItemLedger.ItemCode, Balanceqty
from MstSmartItemLedger
where (CONVERT(Nvarchar, MstSmartItemLedger.SDate, 112) = @previous)
GROUP BY MstSmartItemLedger.ItemCode, Balanceqty
以上是关于如何从SQL Server中的重复行中获取最后一行?的主要内容,如果未能解决你的问题,请参考以下文章
pandas删除数据行中的重复数据行基于dataframe所有列删除重复行基于特定数据列或者列的作何删除重复行删除重复行并保留重复行中的最后一行pandas删除所有重复行(不进行数据保留)