首页 > 解决方案 > SQL Server:从重复项中检索 1 个值

问题描述

我无法从每个重复项中检索最大 1 个值。当我没有在查询中包含名称时它工作正常,但是当我想要输入名称时,它会检索重复的行,即使我使用的是 MAX 函数。

这是一个例子:

SELECT 
    b.Name, MAX(a.receiver), a.DATE1 = MIN(a.DATE1)
FROM 
    Table1 a
INNER JOIN
    Table2 b ON a.receiver = b.account
WHERE
    Company IN (1,2,3,4,5)
GROUP BY
    RECEIVER, b.name

结果:

    NAME      |  Receiver  |  DATE1
    Apple     |   12345    |  2018-01-18 
    Apple A/S |   12345    |  2018-01-19 
    GDG       |   54544    |  2018-01-20 
    BNS       |   54455    |  2018-01-23 

预期结果:

    NAME      |  Receiver  |  DATE1
    Apple     |   12345    |  2018-01-18 
    GDG       |   54544    |  2018-01-20 
    BNS       |   54455    |  2018-01-23 

标签: sqlsql-servertsql

解决方案


由于您似乎并不关心选择了哪个名称,因此只需在该列上放置一个聚合。

但是,相同的接收者 ID 可以具有不同的名称是没有意义的。看起来您在这里根本没有使用键或约束...

SELECT 
    min(b.name),
    a.receiver, 
    DATE1 = min(a.DATE1),
FROM Table1 a
Inner join Table2 b
on a.receiver = b.account
WHERE
Company in (1,2,3,4,5)
group by RECEIVER

推荐阅读