当前位置: 首页 > 面试题库 >

SQL Server 2008:TOP 10与众不同

余靖
2023-03-14
问题内容

如标题所示,我使用的是SQL Server2008。如果这个问题很基础,我深表歉意。我只用了几天的SQL。现在我有以下查询:

SELECT TOP 10 p.id, pl.nm, pl.val, pl.txt_val

from dm.labs pl
join mas_data.patients p    
  on pl.id = p.id
  where pl.nm like '%LDL%'
  and val is not null

我想做的是在ID列中使用select top n以及不同的值。在一些论坛中搜索说要使用

SELECT DISTINCT TOP 10 ...

但是当我将第一行替换为

SELECT DISTINCT TOP 10 p.id, pl.nm, pl.val, pl.txt_val

我得到的结果与不使用不同词的结果相同。我应该怎么做才能只过滤出重复的ID条目?

谢谢你。


问题答案:

简单的选项是使用分组依据,并为所有其他字段选择最小值/最大值

SELECT TOP 10 
    p.id, 
    max(pl.nm),
    max(pl.val),
    max(pl.txt_val)
from 
    dm.labs pl
join 
    mas_data.patients p    
on 
    pl.id = p.id
  where 
    pl.nm like '%LDL%'
and 
    val is not null
group by 
    p.id

对于宽表来说这可能会很繁琐,所以另一种选择是使用排名和参与

SELECT TOP 10 
    p.id, 
     pl.nm, 
     pl.val, 
   pl.txt_val, 
    rank() over(partition by p.id order by p.id) as Rank
from 
    dm.labs pl
join 
    mas_data.patients p    
on 
    pl.id = p.id
  where 
    pl.nm like '%LDL%'
and 
    val is not null
and
    Rank = 1


 类似资料:
  • 问题内容: 当查询中没有汇总时,为什么有人使用分组依据而不是分组? 另外,有人知道分组依据与MySQL和SQL Server中不同的性能注意事项。我猜想SQL Server有一个更好的优化器,并且那里的性能可能接近同等水平,但是在MySQL中,我希望显着的性能优势能够与众不同。 我对dba答案感兴趣。 编辑: Bill的帖子很有趣,但不适用。让我更具体一点… 与 问题答案: 来自MS SQL Se

  • 从纯Java的观点看,RxJava Observable类源自于经典的Gang Of Four的观察者模式。 它添加了三个缺少的功能: 生产者在没有更多数据可用时能够发出信号通知:onCompleted()事件。 生产者在发生错误时能够发出信号通知:onError()事件。 RxJava Observables 能够组合而不是嵌套,从而避免开发者陷入回调地狱。 Observables和Iterab

  • 单品top10数据接口 - GetTop10Skus 获取某个品类的份额前十单品 Request Parameters Parameter name Type Description Required category_id string 品类id Yes platform_id string 平台id,如果为空,则不做过滤 No brand_id string 品牌id,如果为空,则不做过滤 N

  • 品牌top10数据接口 - GetTop10Brands 获取某个品类的份额前十品牌 Request Parameters Parameter name Type Description Required category_id string 品类id Yes platform_id string 平台id,如果为空,则不做过滤 No brand_id string 品牌id,如果为空,则不做过滤

  • 平台top10数据接口 - GetTop10Platforms 获取某个品类的份额前十平台 Request Parameters Parameter name Type Description Required category_id string 品类id Yes platform_id string 平台id,如果为空,则不做过滤 No brand_id string 品牌id,如果为空,则不