报表的Sybase SQL脚本
我正在尝试组合一个SQL脚本,该脚本将在一个脚本中提供以下信息: 节点,LastUpdateTime,字节写入 我想从domain_客户机中拉出具有最新LastUpdateTime的节点报表的Sybase SQL脚本,sql,join,sybase,Sql,Join,Sybase,我正在尝试组合一个SQL脚本,该脚本将在一个脚本中提供以下信息: 节点,LastUpdateTime,字节写入 我想从domain_客户机中拉出具有最新LastUpdateTime的节点 From "domain_Client" table: Node lastUpdatedTime Server1 04042015 Server1 04082015 Server2 04072015 Server2 04062015 我在domain_JobArc
From "domain_Client" table:
Node lastUpdatedTime
Server1 04042015
Server1 04082015
Server2 04072015
Server2 04062015
我在domain_JobArchive中发现了一个不同的表,其中包含BytesWrited和LastUpdateTime(而不是刚刚写入BytesWrited的旧domain_作业)
预期结果:
Node lastUpdatedTime bytesWritten
Server1 04082015 2000
Server2 04072015 3000
到目前为止,我已经能够使用以下脚本查询节点和LastUpdateTime:
select
node, lastUpdatedTime
from domain_Client a
where lastUpdatedTime = (select max(lastUpdatedTime) from domain_Client b
where a.node = b.node
我被困在如何在脚本中包含字节的问题上
我是Sybase SQL的初学者,因此任何帮助都将不胜感激。多谢各位
那么现在我如何将BytesWrite合并到上面的现有脚本中呢?在介绍解决方案之前。我假设
domain\u Client
中的每个记录在某种基础上在domain\u Jobs
中都有一个隐式记录:每次在domain\u Client
中插入一条记录时,另一条记录插入domain\u Jobs
中,最后插入的记录显示在选择结果的顶部,否则就没有解决办法
我使用Oracle是因为SQLFIDLE中不支持Sybase数据库。
你可以用它作为灵感。请注意,我没有优化查询,所以您需要做一些调整
要想做你想做的事,你必须在domain\u Client
和domain\u Jobs
中有一个连接列。因此,我们将向表中添加一个新列(可能是您应该创建表的副本并对其进行修改)
然后创建两个序列:
Alter table domain_Client add join_col number;
Alter table domain_Jobs add join_col number;
更新两个表上的join\u 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
这是的链接,除非您的“域作业”表有更多列,否则我们也会被卡住!您应该有一个列引用键,可以用来链接这两个表。除非您有,否则我们无法将作业链接到写入的相应字节…Saagar,Gerrat,我添加了一个新表(domain_JobArchive),其中LastUpdateTime也存在于domain_Client中。感谢您的帮助。让我试试看。我已经更新了我的问题。你介意看一看并提出建议吗?
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