此选择的目标是获取状态='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。
答案 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值。多个结束日期将以交叉连接格式返回多行。