求句SQL语句

zhiweixuexi6 2018-11-25 12:50:01
表数据如下
ID1 TXT Time
1 '似懂we非懂' 2003-1-1
1 '似懂非rw懂' 2002-1-1
1 '似fsd懂非懂' 2001-1-1
2 '似懂f非懂' 2001-1-1
2 '似懂非we懂' 2002-1-1
2 '似懂we非懂' 2003-1-1
3 '似懂fs非懂' 2001-1-1
3 '似懂we非懂' 2002-1-1
3 '似懂sf非懂' 2003-1-1
...

我想批量获取ID1相同的一组数据中Time最大的那条的ID1 TXT等数据,请问SQL语句如何写能获取这个数据集呢?
...全文
89 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
吉普赛的歌 2018-11-25
  • 打赏
  • 举报
回复
USE tempdb
GO
IF OBJECT_ID('dbo.[t]') IS NOT NULL 
	DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[ID1] INT
,[TXT] NVARCHAR(20)
,[Time] DATETIME	
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'1',N'似懂we非its()懂',N'2003-1-1')
INSERT INTO dbo.[t] VALUES(N'1',N'似懂非rw懂',N'2002-1-1')
INSERT INTO dbo.[t] VALUES(N'1',N'似fsd懂非懂',N'2001-1-1')
INSERT INTO dbo.[t] VALUES(N'2',N'似懂f非懂',N'2001-1-1')
INSERT INTO dbo.[t] VALUES(N'2',N'似懂非we懂',N'2002-1-1')
INSERT INTO dbo.[t] VALUES(N'2',N'似懂we非懂',N'2003-1-1')
INSERT INTO dbo.[t] VALUES(N'3',N'似懂fs非懂',N'2001-1-1')
INSERT INTO dbo.[t] VALUES(N'3',N'似懂we非懂',N'2002-1-1')
INSERT INTO dbo.[t] VALUES(N'3',N'似懂sf非懂',N'2003-1-1')
----- 以上为测试数据 -----

SELECT * FROM t AS a WHERE EXISTS(
	SELECT 1 FROM t AS b 
	WHERE a.ID1=b.id1
	GROUP BY b.id1
	HAVING a.[Time]=MAX(b.[Time])
)

/*
ID1         TXT                  Time
----------- -------------------- -----------------------
1           似懂we非its()懂          2003-01-01 00:00:00.000
2           似懂we非懂               2003-01-01 00:00:00.000
3           似懂sf非懂               2003-01-01 00:00:00.000
 */
二月十六 2018-11-25
  • 打赏
  • 举报
回复
--测试数据
if not object_id(N'Tempdb..#T') is null
drop table #T
Go
Create table #T([ID1] int,[TXT] nvarchar(27),[Time] Date)
Insert #T
select 1,N'似懂we非懂','2003-1-1' union all
select 1,N'似懂非rw懂','2002-1-1' union all
select 1,N'似fsd懂非懂','2001-1-1' union all
select 2,N'似懂f非懂','2001-1-1' union all
select 2,N'似懂非we懂','2002-1-1' union all
select 2,N'似懂we非懂','2003-1-1' union all
select 3,N'似懂fs非懂','2001-1-1' union all
select 3,N'似懂we非懂','2002-1-1' union all
select 3,N'似懂sf非懂','2003-1-1'
Go
--测试数据结束
Select t.ID1,t.TXT,t.Time from (
SELECT *,ROW_NUMBER()OVER(PARTITION BY ID1 ORDER BY Time DESC) rn FROM #T
)t
WHERE t.rn=1


早起晚睡 2018-11-25
  • 打赏
  • 举报
回复
select id1,max(txt) as txt from 表名 group by id1
早起晚睡 2018-11-25
  • 打赏
  • 举报
回复
手机打字真费劲语句都写好了没了就是分组求最大值
zhiweixuexi6 2018-11-25
  • 打赏
  • 举报
回复
谢谢各位大神!昨天弄了一晚上都没搞定,对数据库不是特别了解。
早起晚睡 2018-11-25
  • 打赏
  • 举报
回复
IF OBJECT_ID('dbo.[t]') IS NOT NULL 
DROP TABLE dbo.[t]
GO
CREATE TABLE dbo.[t](
[ID1] INT
,[TXT] NVARCHAR(20)
,[Time] DATETIME
)
GO
SET NOCOUNT ON
INSERT INTO dbo.[t] VALUES(N'1',N'似懂we非its()懂',N'2003-1-1')
INSERT INTO dbo.[t] VALUES(N'1',N'似懂非rw懂',N'2002-1-1')
INSERT INTO dbo.[t] VALUES(N'1',N'似fsd懂非懂',N'2001-1-1')
INSERT INTO dbo.[t] VALUES(N'2',N'似懂f非懂',N'2001-1-1')
INSERT INTO dbo.[t] VALUES(N'2',N'似懂非we懂',N'2002-1-1')
INSERT INTO dbo.[t] VALUES(N'2',N'似懂we非懂',N'2003-1-1')
INSERT INTO dbo.[t] VALUES(N'3',N'似懂fs非懂',N'2001-1-1')
INSERT INTO dbo.[t] VALUES(N'3',N'似懂we非懂',N'2002-1-1')
INSERT INTO dbo.[t] VALUES(N'3',N'似懂sf非懂',N'2003-1-1')

select t.ID1,t.TXT,t.Time from t
inner join (select id1,MAX(txt) as txt from t group by id1) tt on tt.ID1=t.ID1 and tt.txt=t.TXT


借用楼上的数据

3 似懂we非懂 2002-01-01 00:00:00.000
2 似懂非we懂 2002-01-01 00:00:00.000
1 似懂非rw懂 2002-01-01 00:00:00.000

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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