update WAP_MOBILE_IMPORT set
MAX_LAST_TIME = (
select max(LAST_TIME) from WAP_MOBILE_IMPORT
where substr(m.CREATED_TIME,0,10)>'2006-05-15'
group by CREATED_TIME
)
你写的很多都是不需要的
MAX_LAST_TIME = (
select max(LAST_TIME) from WAP_MOBILE_IMPORT
where substr(m.CREATED_TIME,0,10)>'2006-05-15'
group by CREATED_TIME
)
你写的很多都是不需要的
解决方案 »
- 求助:请帮我看看错在哪里,谢谢。
- sql语句字符串可以直接比较吗????
- java透过防火墙访问数据库(oracle),跪求思路!!55
- 向高手问个数据库事务详细定位错误的问题
- 怎么查表有多少列,和列的详细资料
- 帮帮我,我的oracleconsoleorcl service为什么启动失败。
- 请问各位大侠哪里有下oracle 9.2.0.1 的啊!~!~!
- 关于下载ORACLE的问题
- 紧急求救!
- 菜鸟请教:cursor 中怎么循环取纪录?
- 关于序列的一个问题,请教各位了!
- 想通过Oracle Enterprise Manager Console(我是Oracle9i) 实现数据的导入/导出,并已建立了资料库,可是我登录到OMS后,却。。。
group by
order by
吧?
MAX_LAST_TIME = (
select max(LAST_TIME) from WAP_MOBILE_IMPORT
where substr(CREATED_TIME,0,10)>'2006-05-15'
group by CREATED_TIME,PROVINCE
) 这样写仍然报ORA-01427: single-row subquery returns more than one row错误
即使把group by CREATED_TIME,PROVINCE写成group by CREATED_TIME也是会同样的报错
不同的CREATED_TIME,PROVINCE组合对应的 max(LAST_TIME)会不一样
update WAP_MOBILE_IMPORT mi
set (mi.MAX_LAST_TIME) = (select max(m.LAST_TIME) as MAX_LAST_TIME
from WAP_MOBILE_IMPORT m
where substr(m.CREATED_TIME, 0, 10) >
'2006-05-15' and mi.CREATED_TIME =
m.CREATED_TIME and
mi.PROVINCE = m.PROVINCE
group by m.CREATED_TIME, m.PROVINCE
)
update WAP_MOBILE_IMPORT mi set (mi.MAX_LAST_TIME) =
(
select max(m.LAST_TIME) as MAX_LAST_TIME
from WAP_MOBILE_IMPORT m
where mi.CREATED_TIME = m.CREATED_TIME
and mi.PROVINCE = m.PROVINCE
and substr(m.CREATED_TIME,0,10)>'2006-05-15'
),,不能用group by 是显然的,,子查询必须只能返回一条记录是常识,,而group by 可能返回多条.
update WAP_MOBILE_IMPORT set
MAX_LAST_TIME = (
select max(LAST_TIME) from WAP_MOBILE_IMPORT
where substr(m.CREATED_TIME,0,10)>'2006-05-15'
)
这个试试阿
这个可以运行,说明可以更新自己但是子查询出来的是一个值,并没有根据 CREATED_TIME,PROVINCE 来取得相应的max(LAST_TIME)所以这个子查询的结果不符合业务逻辑.看来在update语句里面不能那多个值来更新,只能拿一个值来更新.不知道我这样说对不对啊!??!
CREATE TABLE WAP_MOBILE_IMPORT
(
SP_ID VARCHAR2(6 BYTE),
DEST_USER_PSEUDO_CODE VARCHAR2(14 BYTE),
SP_SERVICE_ID VARCHAR2(8 BYTE),
ACTION CHAR(1 BYTE),
FIRST_TIME VARCHAR2(25 BYTE),
LAST_TIME VARCHAR2(25 BYTE),
CREATED_TIME VARCHAR2(25 BYTE),
PROVINCE VARCHAR2(5 BYTE),
MAX_LAST_TIME VARCHAR2(25 BYTE)
)现在所有记录的 MAX_LAST_TIME 都没有数值
我要先求得在相同省份(PROVINCE)和相同创建时间(CREATED_TIME)的记录中最大的 LAST_TIME .
然后把这个最大的 LAST_TIME update到本表的 MAX_LAST_TIME 字段上,当然在update的时候 省份(PROVINCE)和创建时间(CREATED_TIME) 必须作为条件.说的简单点就是把相同省份和创建时间的记录的最大 LAST_TIME 赋值给有同样省份和创建时间的MAX_LAST_TIME 字段上
您好,我们是“2006中国首届杰出数据库工程师评选”活动组委会。
您的帖子已经被我们转载到本次评选官方网站的“专家在线答疑”区。
http://www.bestdba.cn/match_discussion.aspx在那里,进入本次评选复选的90位数据库工程师将与您展开积极的互动。
一方面,他们会为您的问题提供满意的答案,
另一方面,也邀请您为他们投上宝贵的选票。2006-7-8 ~ 2006-7-25日,每天我们将从当天参与"有奖投票"的网友
中抽取3名幸运者,赠送由IBM提供的精美礼品一份!此外,您还可以在“专家在线答疑”区提出新的问题并参与讨论。您的帖子位于:
http://www.bestdba.cn/match_discussion3.aspx?pointid=88&pointid2=1&pointid3=5非常感谢您对本次活动的支持!
--------------------------------------------------------------
(
select max(m.LAST_TIME) as MAX_LAST_TIME
from WAP_MOBILE_IMPORT m
where substr(m.CREATED_TIME,0,10)>'2006-05-15'
and mi.CREATED_TIME = m.CREATED_TIME
and mi.PROVINCE = m.PROVINCE
and substr(mi.CREATED_TIME,0,10)>'2006-05-15'
group by m.CREATED_TIME,m.PROVINCE
order by m.CREATED_TIME
)
where exists
(
select 1
from WAP_MOBILE_IMPORT m
where substr(m.CREATED_TIME,0,10)>'2006-05-15'
and mi.CREATED_TIME = m.CREATED_TIME
and mi.PROVINCE = m.PROVINCE
and substr(mi.CREATED_TIME,0,10)>'2006-05-15'
group by m.CREATED_TIME,m.PROVINCE
order by m.CREATED_TIME
)
update WAP_MOBILE_IMPORT outer1 set outer1.MAX_LAST_TIME =
(select max(inner1.LAST_TIME)
from WAP_MOBILE_IMPORT inner1
where inner1.CREATED_TIME=outer1.CREATED_TIME and inner1.PROVINCE =outer1.PROVINCE
group by m.CREATED_TIME,m.PROVINCE)
where substr(outer1.CREATED_TIME,0,10)>'2006-05-15'
lz按我写的试试吧,应该行的。
你的select max(LAST_TIME) from WAP_MOBILE_IMPORT
where substr(CREATED_TIME,0,10)>'2006-05-15'
group by CREATED_TIME,PROVINCE
结果有多条记录,怎么通过语句update啊
用存储过程咯!
不过,看来看去,多数都很业余啊……这水平,中国软件怎么上去哦,急……
update tbl set fld = value
这个value是一个值
而select ... group by order by产生的是一个多个记录的集合。
怎么能这样赋值呢?
UPDATE有两种:update ...
set f1=v1, f2=v2, ...
where ...update ...
set (f1, f2, ...) = (select ... from ... where ...)
where ...
对临时表添加pk
使用关联更新处理..create tabel tmp_tbl as
select pk_col,count(*) cnt,sum(col) sum_col
from src_tbl
where ...
group by pk_col;
alter table tmp_tbl add primary key (pk_col);update (
select a.cnt_col,b.cnt
from dest_tbl a,tmp_tbl b
where a.pk_col = b.pk_col
)
set cnt_col = cnt;
...当然max_col也是一样..
(
select MAX_LAST_TIME
from (
select m.CREATED_TIME,m.PROVINCE,max(m.LAST_TIME) as MAX_LAST_TIME
from WAP_MOBILE_IMPORT m
where substr(m.CREATED_TIME,0,10)>'2006-05-15'
group by m.CREATED_TIME,m.PROVINCE
order by m.CREATED_TIME
) mt
where mi.CREATED_TIME = mt.CREATED_TIME
and mi.PROVINCE = mt.PROVINCE
)
有两种我知道,但是第二种的select 不能加group by ...order by
——错,照加不误。
你的这个sql语句直接执行会报ORA-00907: missing right parenthesis,然后我把两个order by m.CREATED_TIME去掉后就可以运行,只不过速度奇慢.等了10分钟仍然不见完成.
update WAP_MOBILE_IMPORT mi set (mi.MAX_LAST_TIME) =
(
select max(m.LAST_TIME) as MAX_LAST_TIME
from WAP_MOBILE_IMPORT m
where substr(m.CREATED_TIME,0,10)>'2006-05-15'
and mi.CREATED_TIME = m.CREATED_TIME
and mi.PROVINCE = m.PROVINCE
and substr(mi.CREATED_TIME,0,10)>'2006-05-15'
group by m.CREATED_TIME,m.PROVINCE
order by m.CREATED_TIME
)
where exists
(
select 1
from WAP_MOBILE_IMPORT m
where substr(m.CREATED_TIME,0,10)>'2006-05-15'
and mi.CREATED_TIME = m.CREATED_TIME
and mi.PROVINCE = m.PROVINCE
and substr(mi.CREATED_TIME,0,10)>'2006-05-15'
group by m.CREATED_TIME,m.PROVINCE
order by m.CREATED_TIME
)
你的这个sql也能执行,但是过了10分钟也没有执行完成. :-(update WAP_MOBILE_IMPORT mi set (mi.MAX_LAST_TIME) =
(
select MAX_LAST_TIME
from (
select m.CREATED_TIME,m.PROVINCE,max(m.LAST_TIME) as MAX_LAST_TIME
from WAP_MOBILE_IMPORT m
where substr(m.CREATED_TIME,0,10)>'2006-05-15'
group by m.CREATED_TIME,m.PROVINCE
order by m.CREATED_TIME
) mt
where mi.CREATED_TIME = mt.CREATED_TIME
and mi.PROVINCE = mt.PROVINCE
)
在中国当程序员都不容易,我虽然java很强,但是在数据库方面仍然是个新手.最近写了些存储过程,感觉是完全力不从心啊.
唉,现在的老板想招一个人什么都会,而且还想样样精通啊,但是给的工资却少的可怜.
5555~~~~~