SQL Server:从重复项中检索1个值

时间:2018-11-19 14:11:29

标签: sql sql-server tsql

我很难从每个重复项中检索最大1个值。当我没有在查询中包含 Name 时,它可以很好地工作,但是当我想要输入名称时,即使我使用的是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 

2 个答案:

答案 0 :(得分:2)

由于您似乎并不在乎选择哪个名称,因此只需在该列上放置一个汇总即可。

尽管相同的接收者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

答案 1 :(得分:0)

您需要汇总名称,请勿按名称分组。例如,MIN(name)将显示'Appple',而MAX(name)将显示'Apple A / S'。

另一方面,a.DATE1 = min(a.DATE1)在SELECT子句中是错误的表达式。

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