ORACLE 关于一些日期处理的sql

取得某月的最后一周的星期一和星期天:

select TRUNC(LAST_DAY(TO_DATE('2013-09', 'YYYY-MM')),'IW') -7, TRUNC(LAST_DAY(TO_DATE('2013-11', 'YYYY-MM')),'IW') -1 FROM DUAL;


其中2013-09可以改变

取得某天的上一周

select (TRUNC(SYSDATE, 'IW') - 7),(TRUNC(SYSDATE, 'IW') - 1), TRUNC(SYSDATE, 'IW')from>    AND T.COLUMN_NAME = T1.COLUMN_NAME
    ORDER BY T.TABLE_NAME;

取得当前数据库编码:

SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER='NLS_CHARACTERSET'


取得分组中某个字段最大的记录:

第一种方法:

SELECT DUMMY_QTY, INTRANSIT_QTY, ZONE_ID, AGENCY_ID, CREATED_ON
  FROM A
 WHERE A.CREATED_ON IN (SELECT MAX(CREATED_ON)
                          FROM A B
                         WHERE B.ZONE_ID = ZONE_ID
                           AND B.AGENCY_ID = AGENCY_ID
                        GROUP BY B.ZONE_ID,B.AGENCY_ID)

第二种方法,用分析函数实现:

SELECT DUMMY_QTY, INTRANSIT_QTY, ZONE_ID, AGENCY_ID, CREATED_ON
  FROM (SELECT A.*,
               ROW_NUMBER() OVER(PARTITION BY ZONE_ID, AGENCY_ID ORDER BY CREATED_ON DESC) RN
          FROM A) B
 WHERE B.RN = 1

第二种实现方法看执行计划用时比第一种方法少

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值