Oracle获得一个月的最后日期

时间:2016-06-15 12:30:06

标签: sql oracle

我对查询和数据库不太满意。 我有以下数据表

Date        ID  Value
20160601    1   300
20160607    1   301
20160601    2   600
20160607    2   601
20160501    1   250
20160507    1   240
20160501    2   800
20160507    2   801

我的要求是为每个ID选择给定月份的最后日期并显示该值。 例如,如果我选择第5个月,结果将是:

Date        ID  Value
20160507    1   240
20160507    2   801

等等,根据用户输入的月份。

我知道它可能看起来很简单,但我真的很困难,我会感激一些帮助。感谢。

2 个答案:

答案 0 :(得分:2)

假设date是实际日期列(应该是),您可以使用extract比较月份值,然后使用row_number() over ...分析函数来获取最新行每id值:

select date, id, value
  from (select date, id, value,
               row_number() over (partition by id order by date desc) as rn
          from tbl
         where extract(month from date) = 5)
 where rn = 1

当然,我假设您的实际日期列被称为其他内容,因为date是保留字。

答案 1 :(得分:0)

找到最大日期,然后选择具有该日期的所有行。

select * 
from table
where date = (select max(date) from table where date like '201605%')