oracle查询上一个月的第一条记录

summbaihj 2011-11-24 11:01:14
oracle查询上一个月的第一条记录,怎么写,请教?
怎样写SQL有效率一点?请教?
...全文
231 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
cosio 2011-11-24
  • 打赏
  • 举报
回复
select id,name,tel,createtime
from
(
select id,name,tel,createtime,row_number()over(partition by createtime) rn from tab1
where trunc(createtime,'mm')=trunc(add_months(sysdate,-1),'mm')
)
where rn=1
summbaihj 2011-11-24
  • 打赏
  • 举报
回复
表名:tab1
字段: id(NUMBER)、name(VARCHAR2)、tel(VARCHAR2),createtime(date)
我心飞翔 2011-11-24
  • 打赏
  • 举报
回复
请给出必要的字段名和类型。
  • 打赏
  • 举报
回复
select * from
(select * from tb1 a where add_months(sysdate,-1)=a.date order by a.id)
where rownum<2
飞过海啊lsq 2011-11-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cosio 的回复:]
--取上个月的值,用函数add_months()
select last_month from tab where add_months(sysdate,-1)=last_month

--只取一条,用row_number()或是min,max的函数
select last_month
from
(
select last_month,row_number()over(order……
[/Quote]
这样写 ,蛮好.
BenChiM888 2011-11-24
  • 打赏
  • 举报
回复
正解。。
[Quote=引用 3 楼 cosio 的回复:]
--取上个月的值,用函数add_months()
select last_month from tab where add_months(sysdate,-1)=last_month

--只取一条,用row_number()或是min,max的函数
select last_month
from
(
select last_month,row_number()over(order……
[/Quote]
cosio 2011-11-24
  • 打赏
  • 举报
回复

--取上个月的值,用函数add_months()
select last_month from tab where add_months(sysdate,-1)=last_month

--只取一条,用row_number()或是min,max的函数
select last_month
from
(
select last_month,row_number()over(order by last_month) rn from tab where add_months(sysdate,-1)=last_month
)
where rn=1

oO寒枫Oo 2011-11-24
  • 打赏
  • 举报
回复

select t.* from tb t where not exists(select 1 from tb where trunc(add_months(sysdate,-1),'mm')=trunc(dt_col,'mm') and dt_col>t.dt_col)
oO寒枫Oo 2011-11-24
  • 打赏
  • 举报
回复
表名 字段名都没?
zengjc 2011-11-24
  • 打赏
  • 举报
回复
通过什么条件来确定地“第一条”记录?
日期?
鸣宇淳 2011-11-24
  • 打赏
  • 举报
回复
借用这位仁兄的例子:

SELECT *
FROM tab1
WHERE trunc(createtime,'mm')=trunc(add_months(sysdate,-1),'mm')
and createtime<=
(
SELECT min(createtime)
FROM tab1
WHERE trunc(createtime,'mm')=trunc(add_months(sysdate,-1),'mm')
)


[Quote=引用 10 楼 luiseradl 的回复:]
实测成功:

SQL code


CREATE TABLE tab1
(
ID NUMBER(4),
NAME VARCHAR2(100),
tel VARCHAR2(20),
createtime DATE
);
DELETE tab1;
INSERT INTO tab1 VALUES(1, 'John', '111111', to_d……
[/Quote]
oO寒枫Oo 2011-11-24
  • 打赏
  • 举报
回复


select t.* from tb t where not exists(select 1 from tb where trunc(add_months(sysdate,-1),'mm')=trunc(dt_col,'mm') and dt_col<t.dt_col)
我心飞翔 2011-11-24
  • 打赏
  • 举报
回复
实测成功:

CREATE TABLE tab1
(
ID NUMBER(4),
NAME VARCHAR2(100),
tel VARCHAR2(20),
createtime DATE
);
DELETE tab1;
INSERT INTO tab1 VALUES(1, 'John', '111111', to_date('2011-10-13 20:00:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO tab1 VALUES(2, 'Peter', '222222', to_date('2011-10-13 20:10:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO tab1 VALUES(3, 'Tom', '333333', to_date('2011-10-14 20:15:00', 'YYYY-MM-DD HH24:MI:SS'));
INSERT INTO tab1 VALUES(4, 'Adward', '444444', to_date('2011-11-20 17:15:00', 'YYYY-MM-DD HH24:MI:SS'));

SELECT * FROM tab1;

SELECT * FROM tab1
WHERE createtime =
(SELECT MIN(createtime)
FROM tab1
WHERE to_char(createtime, 'YYYY-MM') = to_char(add_months(SYSDATE, -1), 'YYYY-MM'));


结果:

3,497

社区成员

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

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