如何从另一个属性中具有相同值的表中获取第一个和最后一个值?

时间:2014-11-01 13:05:07

标签: sql database oracle

我的表friendbook_post包含属性textidauthortypedate_timeid是主键,表中有许多条目。

作者可以发布任意数量的帖子,即“author”可以在多行中相同。

现在我想根据post(text)和日期来获取每个作者所做的第一个和最后一个date('date_time')

我正在尝试使用许多查询,但没有得到预期的结果。

请帮我解决oracle RDBMS。

2 个答案:

答案 0 :(得分:1)

也许你想要这样的东西:

select fp.*
from friendbook_post fp join
     (select fp.author, min(fp.id) as minid, max(fp.id) as maxid
      from friendbook_post
      group by fp.author
     ) a
     on fp.author = a.author and fp.id in (a.minid, a.maxid);

答案 1 :(得分:1)

select id, text, author, type, date_time,
from (
  select text, id, author, type, date_time,
         row_number() over (partition by author order by date_time) as rn,
         count(*) over (partition by author) as total_author_posts
  from friendbook_post
) t
where rn = 1
   or rn = total_author_posts;

或者,如果您希望返回同一个最大或最小日期的多个帖子:

select id, text, author, type, date_time,
from (
  select text, id, author, type, date_time,
         max(date_time) over (partition by author) as max_date,
         min(date_time) over (partition by author) as min_date
  from friendbook_post
) t
where date_time = max_date
   or date_time = min_date;

顺便说一句:date_time是一个可怕的名字。它没有记录什么样的日期时间"那是。删除时间?发布时间?出版时间? "最后改变了时间"?功能