例如,我的表格包含下一列:id,fk_id,date,order。我怎样才能选择这样的东西:
select
id
from cards
where fk_id = pId
and date = pDate;
但我只需要获得具有最高订单价值的行。我怎样才能做到这一点?谢谢。
UPD1:首先 - 谢谢你的回答。列名在真实表中完全不同,它只是问题的虚拟名称。有没有办法这样做,通过加入tha table自己选择?
答案 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
你会得到完全相同的结果......