没有组的SQL组

时间:2015-03-14 17:21:41

标签: sql oracle group-by

对问题的愚蠢标题道歉,但无法提出任何更具描述性的内容。

我的表中有以下数据:

Name; Day ; Mood
----------------
Bob; Fri; Sad
Bob; Thu; Sad
Bob; Wed; Happy
Bob; Tue; Happy
Bob; Mon; Sad

假设是星期六。你知道鲍勃是悲伤的(你按名字分组,并且你超过了这一天)。但是,你想知道Bob是悲伤的时候。

答案是从星期四开始。我想写一个告诉我的SQL查询。问题出在星期一,因为通过天真地写下查询,可以得出结论,自周一以来鲍勃是悲伤的。然而,由于周二和周三的快乐心情,这是错误的。

非常感谢任何帮助(可以是Oracle特定的)。

1 个答案:

答案 0 :(得分:1)

您可以使用row_number()的技巧找到相邻的组。然后,您可以使用聚合获取最后一个的长度:

select max(date) as date, mood
from (select t.*,
             (row_number() over (order by date) -
              row_number() over (partition by mood order by date)
             ) as grp
      from table t
     ) t
group by grp, mood
order by max(date) desc
fetch first 1 row only;

Oracle 12支持最后一句fetch first 1 row only。在早期版本中,您可以使用子查询和where rownum = 1执行相同的操作。