我试图整理一个SQL脚本,它会在一个脚本中提供以下信息: Node,lastUpdatedTime,bytesWritten
从domain_Client我想用最新的lastUpdatedTime取出Node。
From "domain_Client" table:
Node lastUpdatedTime
Server1 04042015
Server1 04082015
Server2 04072015
Server2 04062015
我在domain_JobArchive中找到了另一个包含bytesWritten和lastUpdatedTime的表(而不是只有bytesWritten的旧domain_Jobs)。
From "domain_JobArchive" table:
bytesWritten lastUpdatedTime
1000 04042015
2000 04082015
3000 04072015
4000 04062015
期望的结果:
Node lastUpdatedTime bytesWritten
Server1 04082015 2000
Server2 04072015 3000
到目前为止,我已经能够使用以下脚本查询Node和lastUpdatedTime:
select
node, lastUpdatedTime
from domain_Client a
where lastUpdatedTime = (select max(lastUpdatedTime) from domain_Client b
where a.node = b.node
我坚持如何在脚本中包含bytesWritten。
我是Sybase SQL的初学者,所以我们将不胜感激。谢谢。
那么现在如何将bytesWritten合并到上面的现有脚本中?
答案 0 :(得分:0)
在介绍解决方案之前。我假设domain_Client
中的每个记录在domain_Jobs
中都有一个隐含记录:每次在domain_Client
中插入记录时,domain_Jobs
中都会插入另一条记录最后插入的记录显示在选择结果的顶部,否则有解决方案。
我使用Oracle是因为sqlfiddle中没有Sybase数据库支持。 你可以用它作为灵感。请注意,我没有优化查询,因此您需要进行一些调整。
为了能够做您想做的事情,您必须在domain_Client
和domain_Jobs
中加入一个加入列。因此,我们将向表中添加一个新列(可能您应该创建表的副本并对其进行修改)。
Alter table domain_Client add join_col number;
Alter table domain_Jobs add join_col number;
之后创建两个序列:
Alter table domain_Client add join_col number;
Alter table domain_Jobs add join_col number;
更新两个表上的join_col
:
update domain_Client set join_col = cli_seq.nextval;
update domain_Jobs set join_col = cli_jobs.nextval;
现在我们可以在两个表之间进行连接并获得结果:
SELECT vb.node,
va.maxupdatetime,
vb.bytesWritten
FROM
( SELECT node,
max(LASTUPDATEDTIME) maxupdatetime
FROM domain_Client
GROUP BY node) va
INNER JOIN
( SELECT node,
lastUpdatedTime,
bytesWritten
FROM domain_Client a
INNER JOIN domain_JobArchive b ON a.LASTUPDATEDTIME = b.LASTUPDATEDTIME) vb ON va.node = vb.node
AND va.maxupdatetime = vb.lastUpdatedTime
以下是fiddle
的链接