有关sql语句的写法

fstao 2017-02-27 04:14:34
有一个临时表,如下:
#tmp(id int,productcode varchar(200),listdate datetime,quantity decimal(18,4))

#tmp数据如下:

id productcode listdate quantity
1 001 2017-02-04 20
2 002 2017-02-05 30
3 001 2017-02-05 40
4 003 2017-01-02 50
5 002 2017-02-04 60
6 001 2017-02-03 70


通过select语句来取出每一个productcode的最近日期的数据,如下图:

id productcode listdate quantity
2 002 2017-02-05 30
3 001 2017-02-05 40
4 003 2017-01-02 50


因为productcode=002,最近的日期是'2017-02-05',productcode=001,最近的日期是'2017-02-05',productcode=003,只有一行,且最近的日期是'2017-01-02',
如何用select语句来写,不要用循环语句来主,这样会降低读取数据的速度。
...全文
74 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
二月十六 版主 2017-02-27
  • 打赏
  • 举报
回复
语句:
--测试数据
if object_ID('tempdb..#tmp') is not null
drop table #tmp
Go
CREATE TABLE #tmp
(
id int,productcode varchar(200),listdate datetime,quantity decimal(18,4)
)
Insert #tmp
select 1,'001','2017-02-04', 20 UNION ALL
select 2,'002','2017-02-05', 30 UNION ALL
select 3,'001','2017-02-05', 40 UNION ALL
select 4,'003','2017-01-02', 50 UNION ALL
select 5,'002','2017-02-04', 60 UNION ALL
select 6,'001','2017-02-03', 70
--测试数据结束
;WITH temptab AS (
SELECT productcode ,
MAX(listdate) AS listdate
FROM #tmp
GROUP BY productcode
)
SELECT #tmp.*
FROM #tmp
INNER JOIN temptab ON temptab.listdate = #tmp.listdate
AND temptab.productcode = #tmp.productcode
ORDER BY id


结果:





34,571

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧