我有一个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
我怎样才能得到这个结果?请帮忙
答案 0 :(得分:1)
试试这个:
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
)
答案 1 :(得分:1)
将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
答案 2 :(得分:0)
如果您将其分组到商品代码并使用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