Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 仅保留具有最高金额值的行_Sql_Teradata Sql Assistant - Fatal编程技术网

Sql 仅保留具有最高金额值的行

Sql 仅保留具有最高金额值的行,sql,teradata-sql-assistant,Sql,Teradata Sql Assistant,我想知道如何选择数量最大的用户及其相应的模式。对于每个用户,我都有许多电子邮件。 数据集看起来像 User Email Model Amount 1 name1 1 -2000 1 name11 1 -300 1 name12 3 -7000 42 name2 13 -3200 42 name21 1 -3520 ... 我只需要保留(用户电子邮件型号和金额)金额较大的行。由于该值为负值,我需要保留最慢的值(例如,对

我想知道如何选择数量最大的用户及其相应的模式。对于每个用户,我都有许多电子邮件。 数据集看起来像

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中执行此操作?

希望您允许在子查询上使用db连接

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;

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

您想要什么结果?每个型号还是每个用户一行?负值让这个问题变得很混乱<代码>-7000
是最小的金额,而不是最大的金额。您好。我想你的答案可能有用。然而,我有一些问题,因为用户和金额都来自加入另一个表(电子邮件)的表。怎样才能选择最大金额的用户?更好的解释。。您有两个jser的最大(数量)相同吗??那你呢。。预期结果。。最终更新您的问题并添加清晰的数据样本和相关的预期结果我打开了一个新问题