Sql 选择不是聚合或组中的列

Sql 选择不是聚合或组中的列,sql,oracle11g,Sql,Oracle11g,此选择的目标是获取状态为“FD”的系统的最新分数。我想获得行的ID(ID)、系统ID(sys_ID)和分数(score) 下面的SQL为我提供了系统的id(sys_id)和分数(score),但我也想获得与此分数和sys_id相关联的id列。希望这是有意义的 select sys_id, score from example where (sys_id, end_date) in ( select sys_id, max (end_date) from example where

此选择的目标是获取状态为“FD”的系统的最新分数。我想获得行的ID(ID)、系统ID(sys_ID)和分数(score)

下面的SQL为我提供了系统的id(sys_id)和分数(score),但我也想获得与此分数和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提琴,让您了解我所说的内容


在您询问之前,是的,sys\u id和end\u date的组合将给我一个唯一的行,我可以通过这种方式找到id,但我更愿意在select语句中获得id。

您可以使用一个简单的CTE来获得每个sys\u 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

查看评论中对答案的更改。子查询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值。多个结束日期将以交叉联接格式返回多行

创建一个子查询以获取sys_id和max(end_date)…然后将该子查询连接回原始表以获取所需的值。希望你可以从那里工作,做完整的答案,我需要你的一些表格信息。不要在逻辑中使用where…内部连接要好得多表信息在SQL FIDLE链接中。呵呵,终于看到了。答案贴出来了…和安德鲁真正错过的答案一样的逻辑。我现在应该可以工作了,马虎