我有这个记录。
id performer end_time
300135 testuser 15-OCT-13
300135 testuser 14-OCT-13
300135 testuser 12-OCT-13
300137 newuser 14-OCT-13
300137 newuser 18-OCT-13
现在我想展示不同的ID,但它会告诉我所有的Id,因为end_time是不同的。 所以我需要的是用最新的日期来反驳disticnt Id。
所以结果应该是
id performer end_time
300135 testuser 15-OCT-13 (as 15OCT is the heightest date for 300135)
300137 newuser 18-OCT-13 (as 18OCT is the heightest date for 300137)
目前我所拥有的是
select distinct id, performer, END_TIME from workstep where workstep_name = 'Review' and status ='W_COMPLETED' ....?
但这给了我所有的5条记录。因为它只有2个,因为它只有2个唯一的ID。
请建议
谢谢
答案 0 :(得分:2)
您需要GROUP BY
select id, performer, max(END_TIME) from workstep where workstep_name = 'Review' and status ='W_COMPLETED' group by id,performer
答案 1 :(得分:1)
当你要求3列的唯一行时(id,表演者,END_TIME) 您将获得所有3列组合唯一的行(您的第一个数据列表)
没有足够的条件从第一个列表到第二个列表。
我假设您需要distint ID,并且对于该ID,您要选择END_TIME是最新ID的记录。使用相同的ID,表演者永远不会改变。
所以,只需将它放在sql中(查询每个ID只返回1个reqord):
select ID, max(performer), max(END_TIME)
from workstep
where ID in
(select distinct ID from workstep where <conditions>)
group by ID
如果执行者与ID相同,则上述查询将起作用。 如果执行者可能不同,但您想要从end_time = max(END_TIME)的行显示它,则需要更多(如果在END_TIME上存在平局,查询可以返回每个ID超过1条记录):
select ID, performer, END_TIME from
from workstep
where (id, end_time) in
(
select ID, max(END_TIME)
from workstep
where ID in
(select distinct ID from workstep where <conditions>)
group by ID
)
因此,对于上面的查询,有一个假设是END_TIME对于具有相同ID的每个记录都是不同的。
这是一个更高级的版本,没有这个功能(每个ID只有1条记录):
select id, performer, end_time
from (
select ID, performer, END_TIME,
row_number() over (partition by id order by end_time desc, performer) as No
from workstep
where <conditions>
)
where No = 1
问题?