一条语句取所有表最大记录

[复制链接]
查看11 | 回复9 | 2006-4-17 13:46:34 | 显示全部楼层 |阅读模式
如何实现一条语句取某用户下所有表中的最大日期的记录。每张表都有RQ字段,但,最大日期是不相同的。
服务器:
ORACLE 9I
WINDOW2003
我这有个笨的方法。
select max(rq)
from a
union
select max(rq)
from b
............................................
谁有更好的方法,请指教。
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
You can write a simple pl/sql stored procedure to do it instead of using one sql statement!
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
create VIEW
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
试试刚学到的新技巧:(10G)
WITH
s AS (SELECT SUBSTR(SYS_CONNECT_BY_PATH('SELECT '''||TABLE_NAME||''' AS TABLE_NAME,MAX(ID) AS MAX_ID FROM '||TABLE_NAME,' UNION ALL '),12)
AS sql_text
FROM (
SELECT TABLE_NAME,ROWNUM AS RN FROM USER_TAB_COLUMNS WHERE COLUMN_NAME = 'ID' AND DATA_TYPE='NUMBER'
)
WHERE CONNECT_BY_ISLEAF=1
START WITH RN=1
CONNECT BY RN = PRIOR RN+1
)
,x AS
(
SELECT DBMS_XMLGEN.getxmltype (sql_text) xml_string
FROM s
)
SELECT table_name,max_id
FROM x,
XMLTABLE
(
'$x2/ROWSET/ROW' PASSING xml_string AS "x2"
COLUMNS TABLE_NAME VARCHAR2(30),MAX_ID NUMBER
) x2
;
注意这是我的环境,我有一些表具有ID字段,我用动态SQL把MAX(ID)取出来。你要相应修改为RQ列名。
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
以前统计过,记在这里了,不妨看一下:
http://blog.csdn.net/ilovemilk/archive/2008/12/09/3483836.aspx
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
原帖由 ilovemilk 于 2009-9-17 23:08 发表
以前统计过,记在这里了,不妨看一下:
http://blog.csdn.net/ilovemilk/archive/2008/12/09/3483836.aspx

你这个好像不是楼主想要的结果。
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
原帖由 newkid 于 2009-9-17 22:54 发表
试试刚学到的新技巧:(10G)
WITH
s AS (SELECT SUBSTR(SYS_CONNECT_BY_PATH('SELECT '''||TABLE_NAME||''' AS TABLE_NAME,MAX(ID) AS MAX_ID FROM '||TABLE_NAME,' UNION ALL '),12)
AS sql_text
FROM (
SELECT TABLE_NAME,ROWNUM AS RN FROM USER_TAB_COLUMNS WHERE COLUMN_NAME = 'ID' AND DATA_TYPE='NUMBER'
)
WHERE CONNECT_BY_ISLEAF=1
START WITH RN=1
CONNECT BY RN = PRIOR RN+1
)
,x AS
(
SELECT DBMS_XMLGEN.getxmltype (sql_text) xml_string
FROM s
)
SELECT table_name,max_id
FROM x,
XMLTABLE
(
'$x2/ROWSET/ROW' PASSING xml_string AS "x2"
COLUMNS TABLE_NAME VARCHAR2(30),MAX_ID NUMBER
) x2
;
注意这是我的环境,我有一些表具有ID字段,我用动态SQL把MAX(ID)取出来。你要相应修改为RQ列名。

威猛!
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
原帖由 ilovemilk 于 2009-9-17 23:08 发表
以前统计过,记在这里了,不妨看一下:
http://blog.csdn.net/ilovemilk/archive/2008/12/09/3483836.aspx

用了游标,就不难了
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
原帖由 guostong 于 2009-9-18 03:04 发表

威猛!

用XML函数执行动态SQL是从这里学来的:
http://www.itpub.net/thread-1216120-2-2.html
只是新奇好玩而已,并不是说比传统的动态SQL性能更好。
回复

使用道具 举报

千问 | 2006-4-17 13:46:34 | 显示全部楼层
nice
DBMS_XMLGEN.getxmltype
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行