正如标题所说,我使用的是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并为所有其他字段选择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 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相关问答推荐

小数位拼写错误 + postgresql

SQL查询根据两列对日期进行排序

如何找出具有多个条件的相同值并将同一列的值放在不同的列中?

如何分组输出 2 列中的每个值组合? - SQL

SQL - 按订单条件分组

为基于另一个表的表中的每个条件选择前 n 个(变量)

Airflow PostgresHook 错误编解码器无法解码位置 3 中的字节 0xc3

如何拆分具有逗号和冒号的字符串

oracle DB 为什么字符串中有空间比较总是返回false?

为什么这个转换为 DATETIME2?

dateadd 函数snowflake中的变量

在 string_agg 函数中使用 if 语句

使用PostgreSQL根据第二个表中的列更新一个表中的jsonb列

视图是否自动更新

如何使用 SQLPLUS 假脱机到 CSV 格式的文件?

如何在 SQLALchemy 中执行左连接?

Postgresql中的`->>`和`->`有什么区别?

从表中选择多个列,但按一个分组

postgresql - 查看架构权限

LATERAL JOIN 和 PostgreSQL 中的子查询有什么区别?