我有这张桌子:
|--------------|-------------|-----------|-----------|
| 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 |
|-------------|
谢谢!
答案 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 )