0

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

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

但我只需要获得最高阶值的行。我怎样才能做到这一点?谢谢你。

UPD1:首先-感谢您的回答。真实表中的列名完全不同,它只是用于提问的虚拟名称。有什么办法可以通过将表格与自身连接来进行选择?

4

4 回答 4

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;
于 2013-09-03T09:55:14.940 回答
1

首先,不要在列名中使用“订单”和“日期”这两个词。两者都是 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

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

于 2013-09-03T09:58:12.950 回答
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;

这是相当有效的。

于 2013-09-03T09:52:00.990 回答
1

你可以尝试这样的事情:

select 
id
from cards
where fk_id = pId
and date = pDate 
order by desc 
limit 1;
于 2013-09-03T09:54:20.400 回答