求一个相对简单的SQL算法

jeremy 2011-08-28 10:33:47
select max(ObjectGUID),AlarmObjectID from [alarmdb].[dbo].[PowerEnvAlarm]
where Cancel_Time is null
GROUP BY AlarmObjectID,NMAlarmID


本想用这个语句找出表中 AlarmObjectID,NMAlarmID 相同的一条记录的
无奈ObjectGUID 是varchar类型 ,请大伙给个办法!
...全文
76 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiemo587 2011-08-29
  • 打赏
  • 举报
回复


--用row_number()排名,相同只取第一条
select * from (
select *,row_number() over (partition by AlarmObjectID,NMAlarmID order by ObjectGUID) AS NUM_ID
from [alarmdb].[dbo].[PowerEnvAlarm]
where Cancel_Time is null) a
where NUM_ID=1

jeremy 2011-08-29
  • 打赏
  • 举报
回复
忘了跟大家说了,ObjectGUID 是一个uniqueidentifier别类型,所以不能用MAX
叶子 2011-08-28
  • 打赏
  • 举报
回复

select max(ObjectGUID),AlarmObjectID from [alarmdb].[dbo].[PowerEnvAlarm]
where Cancel_Time is null and ObjectGUID=ltrim(AlarmObjectID)
GROUP BY AlarmObjectID,NMAlarmID
快溜 2011-08-28
  • 打赏
  • 举报
回复
select * from PowerEnvAlarm a
where Cancel_Time is null
and ObjectGUID=(select max(ObjectGUID) from powerenvalarm
where AlarmObjectID=a.AlarmObjectID and NMAlarmID=a.NMAlarmID)
快溜 2011-08-28
  • 打赏
  • 举报
回复
select ObjectGUID,AlarmObjectID 
from [alarmdb].[dbo].[PowerEnvAlarm]
where Cancel_Time is null
GROUP BY AlarmObjectID,NMAlarmID
having count(*)>1
-晴天 2011-08-28
  • 打赏
  • 举报
回复
select * from PowerEnvAlarm a
where Cancel_Time is null and not exists(select 1 from powerenvalarm where AlarmObjectID=a.AlarmObjectID and NMAlarmID=a.NMAlarmID and ObjectGUID>a.ObjectGUID)

其实max 也可以用的,字符串类型的max值就是排序中最大的值.

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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