求一个统计最新日期数量的 sql

terlk118 2018-01-15 08:52:37
数据库中的数据格式如下
SDate SName num
2018-01-01 A 10
2018-01-02 A 40
2018-01-03 A 20
2018-01-02 B 10
2018-01-02 C 30
2018-01-04 C 10
2018-01-02 D 20

需要的结果,查找每个SName最新日期的记录
SDate SName num
2018-01-03 A 20
2018-01-02 B 10
2018-01-04 C 10
2018-01-02 D 20
...全文
312 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-01-15
  • 打赏
  • 举报
回复
--借#1数据
--测试数据
if not object_id(N'Tempdb..#T') is null
    drop table #T
Go
Create table #T([SDate] Date,[SName] nvarchar(21),[num] int)
Insert #T
select '2018-01-01',N'A',10 union all
select '2018-01-02',N'A',40 union all
select '2018-01-03',N'A',20 union all
select '2018-01-02',N'B',10 union all
select '2018-01-02',N'C',30 union all
select '2018-01-04',N'C',10 union all
select '2018-01-02',N'D',20
Go
--测试数据结束
;WITH cte AS (
	SELECT 
	MAX(SDate) AS SDate
	,SName
	FROM #t GROUP BY SName
)
SELECT 
*
,(SELECT TOP 1 b.num FROM #t AS b 
  WHERE a.SDate=b.SDate AND a.SName=b.SName 
  ORDER BY b.num DESC) AS num 
FROM cte AS a;
二月十六 版主 2018-01-15
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([SDate] Date,[SName] nvarchar(21),[num] int)
Insert #T
select '2018-01-01',N'A',10 union all
select '2018-01-02',N'A',40 union all
select '2018-01-03',N'A',20 union all
select '2018-01-02',N'B',10 union all
select '2018-01-02',N'C',30 union all
select '2018-01-04',N'C',10 union all
select '2018-01-02',N'D',20
Go
--测试数据结束
SELECT *
FROM ( SELECT * ,
ROW_NUMBER() OVER ( PARTITION BY SName ORDER BY SDate DESC ) AS rn
FROM #T
) t
WHERE rn = 1


二月十六 版主 2018-01-15
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([SDate] Date,[SName] nvarchar(21),[num] int)
Insert #T
select '2018-01-01',N'A',10 union all
select '2018-01-02',N'A',40 union all
select '2018-01-03',N'A',20 union all
select '2018-01-02',N'B',10 union all
select '2018-01-02',N'C',30 union all
select '2018-01-04',N'C',10 union all
select '2018-01-02',N'D',20
Go
--测试数据结束
SELECT #T.*
FROM #T
JOIN ( SELECT MAX(SDate) AS SDate ,
SName
FROM #T
GROUP BY SName
) t ON t.SName = #T.SName
AND t.SDate = #T.SDate
ORDER BY #T.SName


34,576

社区成员

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

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