选择不是聚合或组的列

时间:2014-08-06 19:55:54

标签: sql oracle11g

此选择的目标是获取状态='FD'的系统的最新分数。我想获取行(ID)的ID,系统ID(sys_id)和分数(分数)。

以下SQL为我提供了系统的ID(sys_id)以及得分(得分),但我也希望获得与此得分和sys_id相关联的id列。希望这是有道理的。

select sys_id, score from example
where (sys_id, end_date) in
(
  select sys_id,  max (end_date)
  from example
  where status = 'FD'
  group by sys_id
);

这是一个SQL小提琴,让您了解我所谈论的内容http://www.sqlfiddle.com/#!4/169a2/3

在你问之前,是的,sys_id和end_date的组合会给我一个唯一的行,我可以找到这样的id,但我宁愿在我的select语句中获取id。

2 个答案:

答案 0 :(得分:0)

您可以使用简单的CTE获取每个SYS_ID的最大日期,并将其连接回您的表格以获取该特定记录的所有详细信息。

 with CTE as (
 select sys_id,  max (end_date) as MaxDate
  from example
  where status = 'FD'
  group by sys_id)

select
EXAMPLE.*

from
EXAMPLE
INNER JOIN CTE
  ON EXAMPLE.SYS_ID = CTE.SYS_ID
  and EXAMPLE.END_DATE = CTE.MaxDate

查看对SQL Fiddle

的更改

答案 1 :(得分:0)

回答评论。 SUbquery a来自你的陈述...我的懒惰编程。

select a.*, e.score
from
(
select sys_id,  max (end_date) as 'ed'
from example
 where status = 'FD'
group by sys_id
)a
inner join example e on a.ed = e.end_date and a.sys_id = e.sys_ID

对谓词起作用,即给定的sys_id和结束日期只有一个unqiue值。多个结束日期将以交叉连接格式返回多行。

相关问题