正如标题所说,我使用的是SQL Server 2008.如果这个问题很基本,我道歉.我使用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

我得到的结果与不使用distinct这个词时相同.我应该做什么才能过滤出重复的条目?

非常感谢.

推荐答案

简单的选项是使用group by并为所有其他字段 Select min/max

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 是使用排名覆盖和分区

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

Sql相关问答推荐

SQL:创建查询以添加减少的总数

如何根据SQL中的列条件获取下一个时间戳?

如何解决Error:operator is not unique:unknown—unknown在一个动态SQL查询?""""

Select 最大值,但当并列时,从其他列 Select 最大值

对非RUST源代码字符串使用`stringify!`,例如SQL查询

用户购买平台及金额统计

将计算列设置为持久化的目的是什么?

关于Postgres横向联接的谓词

如何使用不重复的单个顶级字段(列)向json数组 Select 多行

如何在SQL中从多个查询进行分组

聚合内部的条件在哪里?

在 postgres 中插入或更新 jsonb 数组的对象

SQL 查询是否返回列表中仅包含某些值而不包含其他值的行?

每组使用平均值来填补缺失值的SQL

使用对 nvarchar 列的多个 LIKE 操作优化 SQL 查询

如何 Select 一列具有最小值而另一列具有给定值的记录?

在给定列中具有特定值的行与 SQL 中的总行数的比率

如何在 RavenDB Studio (RQL) 中插入更新文档

SQL - 使用子查询返回多行的 LIKE 命令

聚合 Athena 中的列