我很难从每个重复项中检索最大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
答案 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