选择具有最高订单值的行

时间:2013-09-03 09:48:43

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

例如,我的表格包含下一列:id,fk_id,date,order。我怎样才能选择这样的东西:

select 
  id
from cards
where fk_id = pId
and date = pDate;

但我只需要获得具有最高订单价值的行。我怎样才能做到这一点?谢谢。

UPD1:首先 - 谢谢你的回答。列名在真实表中完全不同,它只是问题的虚拟名称。有没有办法这样做,通过加入tha table自己选择?

4 个答案:

答案 0 :(得分:3)

您将使用聚合函数KEEP DENSE_RANK FIRST:

select 
MIN(id) KEEP (DENSE_RANK FIRST ORDER BY "order" desc) 
from cards
where fk_id = pId
and "date" = pDate;

答案 1 :(得分:1)

这样的事情:

SELECT id
FROM cards
WHERE orderValue = (SELCT MAX(orderValue)
                    FROM cards
                    WHERE fk_id = pId
                    AND date = pDate)
AND fk_id = pId
AND date = pDate;

这非常有效。

答案 2 :(得分:1)

您可以尝试这样的事情:

select 
id
from cards
where fk_id = pId
and date = pDate 
order by desc 
limit 1;

答案 3 :(得分:1)

首先,不要对列名使用“order”和“date”。两者都是SQL中的保留字(ORDER BY ...子句,DATE是数据类型)。所以在我的例子中,我将使用“myorder”和“mydate”而不是......

我认为你的例子纯粹是假设的,因为对于所选的列名,它很可能无论如何都不适用于任何SQL数据库。

在Oracle数据库中,你可以试试这个:

select ID from 
( select ID, row_number() over (partition by ID order by MYORDER) as RN
  from CARDS where FK_ID = PID and MYDATE = PDATE)
where RN = 1

但是,您的选择只有一列ID。所以,如果你只是做

select distinct ID from CARDS

你会得到完全相同的结果......