SQL Server中一个SQL语句问题 20分,无满意结帖,结帖人niesen111]

发布时间:2017-6-25 8:04:44 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"SQL Server中一个SQL语句问题 20分,无满意结帖,结帖人niesen111]",主要涉及到SQL Server中一个SQL语句问题 20分,无满意结帖,结帖人niesen111]方面的内容,对于SQL Server中一个SQL语句问题 20分,无满意结帖,结帖人niesen111]感兴趣的同学可以参考一下。

数据表MatchNumLog有字段:ID(自动编号),RuleID,MatchNum,Frequency(MatchNum的出现次数) 主键为RuleID和MatchNum,数据如下所示: ID(自动编号)  RuleID    MatchNum    Frequency 1                 001        1            3 2                 001        2            5 3                 002        3            1 4                 002        4            10 5                 002        1            6 若要求各个RuleID出现次数最多(Frequency最大)的MatchNum,SQL语句该如何写?谢谢! 如上例要求的结果为: 2                 001        2            5 4                 002        4            10

use Tempdb go --> -->    if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([ID] int,[RuleID] nvarchar(3),[MatchNum] int,[Frequency] int) Insert #T select 1,N'001',1,3 union all select 2,N'001',2,5 union all select 3,N'002',3,1 union all select 4,N'002',4,10 union all select 5,N'002',1,6 Go SELECT * FROM  (Select *,COUNT(*)OVER(PARTITION BY [RuleID]) con,ROW_NUMBER()OVER(PARTITION BY [RuleID] ORDER BY [Frequency] desc) AS row from #T AS a )t WHERE row=1 /* ID RuleID MatchNum Frequency con row 2 001 2 5 2 1 4 002 4 10 3 1 */

select * from tb a  where id=(select top 1 id from tb where RuleID=a.RuleID order by MatchNum desc,Frequency desc)

select t.* from MatchNumLog t where Frequency = (select max(Frequency) where RuleID = t.RuleID) select t.* from MatchNumLog t where not exists (select 1 where RuleID = t.RuleID and Frequency > t.Frequency)

select t.* from MatchNumLog t where Frequency = (select max(Frequency) from MatchNumLog where RuleID = t.RuleID) select t.* from MatchNumLog t where not exists (select 1 from MatchNumLog where RuleID = t.RuleID and Frequency > t.Frequency)

select * from MatchNumLog t where Frequency = (select max(Frequency) where RuleID = t.RuleID)

引用 1 楼 roy_88 的回复:SQL code use Tempdb go --> -->    if not object_id(N'Tempdb..#T') is null     drop table #T Go Create table #T([ID] int,[RuleID] nvarchar(3),[MatchNum] int,[Frequency] int) Insert #T selec…… 如果要求仅出现一次的RuleID不显示,该如何进行限制?

如果Frequency相同時,取ID最大的 use Tempdb go --> -->    if not object_id(N'Tempdb..#T') is null     drop table #T Go Create table #T([ID] int,[RuleID] nvarchar(3),[MatchNum] int,[Frequency] int) Insert #T select 1,N'001',1,3 union all select 2,N'001',2,5 union all select 3,N'002',3,1 union all select 4,N'002',4,10 union all select 5,N'002',1,6 UNION ALL select 6,N'002',1,10 --方法1: Select * from #T a where not exists(select 1 from #T where [RuleID]=a.[RuleID] and [Frequency]>a.[Frequency] OR ([Frequency]=a.[Frequency] AND [ID]>a.[ID] ) ) --方法2: select * from (select *,row_number()over(partition by [RuleID] order by [Frequency] DESC,ID DESC ) as MaxID from #T a)T  where MaxID=1 /* ID RuleID MatchNum Frequency 2 001 2 5 6 002 1 10 */

引用 6 楼 niesen111 的回复:引用 1 楼 roy_88 的回复: SQL code use Tempdb go --> --> if not object_id(N'Tempdb..#T') is null drop table #T Go Create table #T([ID] int,[RuleID] nvarchar(3),[MatchNum] int,[Frequency] int) I…… con>1--這個條件 SELECT * FROM  (Select *,COUNT(*)OVER(PARTITION BY [RuleID]) con,ROW_NUMBER()OVER(PARTITION BY [RuleID] ORDER BY [Frequency] desc) AS row from #T AS a )t WHERE row=1 AND con>1

为什么总是提示 OVER 附近有语法错误,我是粘贴复制的

上一篇:sql过滤查询问题,在线等。。。。顶者有分。。。请大家帮我看看。。。。 100fengyuananan]
下一篇:将 FILESTREAM 作为源的列不支持部分更新 20testcs_dn]

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。