相同记录取最大值并且只显示一条 相关sql

hncslsy 2009-09-04 08:30:28
取code 相同的记录中 values 最大的记录 ,如果 values 值有相同的 取 id 大的一条


id code values
1 a 2
2 a 3
3 a 3
4 b 1
5 b 4
6 b 4


显示结果

id code values
3 a 3
6 b 4

...全文
885 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
叶子 2009-09-13
  • 打赏
  • 举报
回复

declare @table table (id int,code varchar(1),[values] int)
insert into @table
select 1,'a',2 union all
select 2,'a',3 union all
select 3,'a',3 union all
select 4,'b',1 union all
select 5,'b',4 union all
select 6,'b',4

select max(id) as id,code,max([values]) as [values]
from @table group by code

/*
id code values
----------- ---- -----------
3 a 3
6 b 4
*/
--这样不行吗?你不是就要取最大的吗?
--重复也是取最大的,貌似和重复没有什么关系。
linpansheng 2009-09-13
  • 打赏
  • 举报
回复
学习这个,不错
影帆 2009-09-13
  • 打赏
  • 举报
回复
学习了!!
renzhe02 2009-09-13
  • 打赏
  • 举报
回复
2楼方法好!
zhengzeng 2009-09-12
  • 打赏
  • 举报
回复
来迟了。呵呵
guguda2008 2009-09-12
  • 打赏
  • 举报
回复
懒得写了。前几楼正解
happinessdepig 2009-09-12
  • 打赏
  • 举报
回复
正好要解决这个问题,学习了!
lihan6415151528 2009-09-04
  • 打赏
  • 举报
回复
重复数据一般用not exists 查询
soft_wsx 2009-09-04
  • 打赏
  • 举报
回复
来晚了!撤吧!
--小F-- 2009-09-04
  • 打赏
  • 举报
回复
都写好了 那就学习了
华夏小卒 2009-09-04
  • 打赏
  • 举报
回复

declare @tb table(id int, code varchar(10), [values] int)
insert @tb select
1, 'a' , 2 union all select
2 , 'a' , 3 union all select
3 , 'a' , 3 union all select
4 , 'b' , 1 union all select
5 ,'b' , 4 union all select
6 ,'b' , 4


select* from @tb t
where not exists (select * from @tb where code=t.code and ([values]>t.[values] or [values]=t.[values] and id>t.id))

id code values
----------- ---------- -----------
3 a 3
6 b 4

(2 行受影响)
百年树人 2009-09-04
  • 打赏
  • 举报
回复
select 
*
from
tb t
where
not exists(select 1 fromm tb where code=t.code and (value>t.value or value=t.value and id>t.id))
-狙击手- 2009-09-04
  • 打赏
  • 举报
回复
..
liangCK 2009-09-04
  • 打赏
  • 举报
回复
-------------------------------------------
-- Author : liangCK 小梁
-- Comment: 小梁 爱 兰儿
-- Date : 2009-09-04 20:32:39
-------------------------------------------

--> 生成测试数据: @T
DECLARE @T TABLE (id INT,code VARCHAR(1),[values] INT)
INSERT INTO @T
SELECT 1,'a',2 UNION ALL
SELECT 2,'a',3 UNION ALL
SELECT 3,'a',3 UNION ALL
SELECT 4,'b',1 UNION ALL
SELECT 5,'b',4 UNION ALL
SELECT 6,'b',4 UNION ALL
SELECT 7,'c',1

--SQL查询如下:

--1
SELECT * FROM @T AS A
WHERE NOT EXISTS(SELECT * FROM @T WHERE code = A.code AND [values] > A.[values])
AND NOT EXISTS(SELECT * FROM @T
WHERE code = A.code AND [values]=A.[values] AND id > A.id);

--2
SELECT id,code,[values]
FROM (SELECT rowid=ROW_NUMBER() OVER(PARTITION BY code ORDER BY [values] DESC,id DESC),*
FROM @T) AS T
WHERE rowid = 1;


/*
id code values
----------- ---- -----------
3 a 3
6 b 4
7 c 1

(3 row(s) affected)

id code values
----------- ---- -----------
3 a 3
6 b 4
7 c 1

(3 row(s) affected)
*/
liangCK 2009-09-04
  • 打赏
  • 举报
回复
SELECT * FROM tb AS A
WHERE NOT EXISTS(SELECT * FROM tb WHERE code = A.code AND [values] > A.[values])
AND NOT EXISTS(SELECT * FROM tb
WHERE code = A.code AND [values]=A.[values] AND id > A.id)

34,593

社区成员

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

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