只保留金额最高的行

Keeping only rows with highest amount value

我想知道如何select拥有最多数量的用户及其对应的model.For每个用户我有很多电子邮件。 数据集看起来像

User Email Model Amount
1    name1  1      -2000
1    name11 1      -300
1    name12 3      -7000
42   name2  13     -3200
42   name21 1      -3520
...

我只需要保留具有更大数量的(用户电子邮件模型和数量)行。由于该值为负,我需要保留最慢的值(例如,用户 1 为 -7000)。

如何在 SQL Teradata Assistant 中完成?

希望你的数据库允许加入子查询

select t.User, m.Email, m.Model, m.Amount
gtom my_table m
inner join   (
    select user, max(amount) max_amount
    from my_table 
    group by user
) t on t.user = m.user
    and t.max_amount  = m.amount

在 Teradata 中,这通常使用 qualify 完成。如果您希望每个用户一行,数量最少:

select t.*
from t
qualify row_number() over (partition by user order by amount) = 1;

如果您希望每个用户一行,只需更改 partition by。如果您想要最大值而不是最小值,您可以将 desc 添加到 order by.