如何提取某个表每个月最后一天

陈灬风 2016-02-25 03:43:31
如何提取某个表每个月最后一天,比如我表格A里面有很多数据,要取数据为每个月的最后一天,各位有什么好的建议?
表格A
date data
2016/1/31 11
2016/2/29 qe
2016/3/31 qe
2016/2/22 a
2016/1/1 a
要得到的数据为
date data
2016/1/31 11
2016/2/29 qe
2016/3/31 qe

...全文
7220 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zengjc 2016-03-02
  • 打赏
  • 举报
回复
上次一打岔,把这事情给忘记了,这次补上代码,使用last_day无需排序
with tb1 as
 (select date '2016-01-31' as dat, '11' as data
    from dual
  union all
  select date '2016-02-29' as dat, 'qe' as data
    from dual
  union all
  select date '2016-03-31' as dat, 'qe' as data
    from dual
  union all
  select date '2016-02-22' as dat, 'a' as data
    from dual
  union all
  select date '2016-01-01' as dat, 'a' as data from dual) 
select * from tb1 where dat=last_day(dat);
引用 2 楼 zengjc 的回复:
使用LAST_DAY函数,date字段的值在LAST_DAY中即可,具体代码等会再写
jiana839353733 2016-02-26
  • 打赏
  • 举报
回复
1樓方法不錯,學習了!
z034736 2016-02-26
  • 打赏
  • 举报
回复
with table1 as (select date '2016-01-31' as dat, '11' as data from dual union all select date '2016-02-29' as dat, 'qe' as data from dual union all select date '2016-03-31' as dat, 'qe' as data from dual union all select date '2016-02-22' as dat, 'a' as data from dual union all select date '2016-01-01' as dat, 'a' as data from dual ) select a.dat,a.data from table1 a,( select max(dat) dat from table1 group by to_char(dat,'yyyy-MM') order by to_char(dat,'yyyy-MM') desc ) b where a.dat = b.dat
z123zjf 2016-02-25
  • 打赏
  • 举报
回复
select max(dat) from table1 group by to_char(dat,'yyyymm')
zbdzjx 2016-02-25
  • 打赏
  • 举报
回复
with table1 as
(select date '2016-01-31' as dat, '11' as data from dual
 union all
 select date '2016-02-29' as dat, 'qe' as data from dual
 union all
 select date '2016-03-31' as dat, 'qe' as data from dual
 union all
 select date '2016-02-22' as dat, 'a' as data from dual
 union all
 select date '2016-01-01' as dat, 'a' as data from dual
)
select * from table1 where to_char(dat,'mm') <> to_char(dat + 1,'mm')
zengjc 2016-02-25
  • 打赏
  • 举报
回复
使用LAST_DAY函数,date字段的值在LAST_DAY中即可,具体代码等会再写
xu176032 2016-02-25
  • 打赏
  • 举报
回复


with tb1 as
 (select date '2016-01-31' as dat, '11' as data
    from dual
  union all
  select date '2016-02-29' as dat, 'qe' as data
    from dual
  union all
  select date '2016-03-31' as dat, 'qe' as data
    from dual
  union all
  select date '2016-02-22' as dat, 'a' as data
    from dual
  union all
  select date '2016-01-01' as dat, 'a' as data from dual)

select dat, data
  from (select dat,
               data,
               row_number() over(partition by to_char(dat, 'yyyymm') order by dat desc) as fn
          from tb1)
 where fn = 1

3,491

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧