在列中使用MAX()仅获得1行-SAP HANA

时间:2019-03-12 15:43:47

标签: sql greatest-n-per-group hana

我有这张桌子:

|--------------|-------------|-----------|-----------|
|    cli_id    |    email    |   is_one  |  n_order  |
|--------------|-------------|-----------|-----------|
|       1      |   a@a.com   |     1     |   2341    |
|--------------|-------------|-----------|-----------|
|       1      |   b@a.com   |     0     |     21    |
|--------------|-------------|-----------|-----------|
|       1      |   c@a.com   |     0     |    121    |
|--------------|-------------|-----------|-----------|
|       1      |   a@a.com   |     1     |     50    |
|--------------|-------------|-----------|-----------|

如何仅选择1封电子邮件,一封电子邮件的MAX(is_one)和MAX(n_order)?例如,我不能使用“ WHERE is_one = 1”,而必须使用“ max(is_one)”或等效名称。

结果必须是这个:

|-------------|
|    email    |
|-------------|
|   a@a.com   |
|-------------|

谢谢!

4 个答案:

答案 0 :(得分:1)

嗯。 。 。

select top (1) email
from t
order by is_one desc, n_order desc;

答案 1 :(得分:1)

您想要包含以下内容的行中的email
is_one
的最大值 n_order的最大值,对吧?

select email from tablename
where
  is_one = (select max(is_one) from tablename)
  and
  n_order = (select max(n_order) from tablename)

答案 2 :(得分:0)

使用r ow_number()(如果支持)

   select * from (
  select *, row_number()over(order by  is_one desc,n_order desc) rn
   ) a where a.rn=1

答案 3 :(得分:0)

您可以将子查询与max聚合函数一起使用,如下所示

SELECT t~email
  FROM tab AS t
 WHERE (t~is_one, t~n_order) IN
      ( SELECT max(t~is_one), max(t~n_order)
          FROM tab )