我目前正在研究 Sybase ASE rdms,并且我有下表 (JOB_AUDIT) 填充了示例数据集:
IDJOB | 批 | M_DATE | 开始时间 | 时间结束 |
---|---|---|---|---|
1 | 一个 | 12-25-2012 00:00:00 | 40100 | 40110 |
2 | 一个 | 12-25-2012 00:00:00 | 40111 | 40118 |
3 | 乙 | 12-25-2012 00:00:00 | 40118 | 40129 |
4 | 一个 | 12-27-2012 00:00:00 | 40100 | 40112 |
5 | 一个 | 12-27-2012 00:00:00 | 40113 | 40118 |
6 | C | 12-27-2012 00:00:00 | 40120 | 40134 |
……
我想做的是首先计算每个批次每天运行的总执行时间,然后我想计算每个 bach 每天执行的百分比。
所以我创建了这个查询:
SELECT
T1.M_DATE as Batch_DATE,
T1.BATCH as Batch,
count(T1.IDJOB) as Nb_jobs,
sum(T1.END_TIME-T1.START_TIME) as Exec_Duration,
sum(T1.END_TIME-T1.START_TIME)/T2.total as pct
FROM
JOB_AUDIT T1
inner join
(select M_DATE,sum(END_TIME-START_TIME) as total from AUDIT_REP group by M_DATE) T2
ON
T1.M_DATE = T2.M_DATE
GROUP BY T1.M_DATE,T1.M_BATCH;
T2 表应该给我这样的输出:
M_DATE | 全部的 |
---|---|
12-25-2012 00:00:00 | 28 |
12-27-2012 00:00:00 | 31 |
那么决赛桌应该是这样的:
Batch_DATE | 批 | NB_jobs | Exec_Duration | 百分比 |
---|---|---|---|---|
12-25-2012 00:00:00 | 一个 | 2 | 17 | 0.607 |
12-25-2012 00:00:00 | 乙 | 1 | 11 | 0.393 |
12-27-2012 00:00:00 | 一个 | 2 | 17 | 0.548 |
12-27-2012 00:00:00 | C | 1 | 14 | 0.452 |
但似乎连接不起作用,因为我有以下结果:
Batch_DATE | 批 | NB_jobs | Exec_Duration | 百分比 |
---|---|---|---|---|
12-25-2012 00:00:00 | 一个 | 2 | 17 | 0.607 (17/28) |
12-25-2012 00:00:00 | 一个 | 2 | 17 | 0.548 (17/31) 不正确 |
12-25-2012 00:00:00 | 乙 | 1 | 11 | 0.393 (11/28) |
12-25-2012 00:00:00 | 乙 | 1 | 11 | 0.355 (11/31) 不正确 |
12-27-2012 00:00:00 | 一个 | 2 | 17 | 0.607 (17/28) 不正确 |
12-27-2012 00:00:00 | 一个 | 2 | 17 | 0.548 (17/31) |
12-27-2012 00:00:00 | C | 1 | 14 | 0.500 (14/28) 不正确 |
12-27-2012 00:00:00 | C | 1 | 14 | 0.452 (14/31) |
所以,我想知道为什么我不能使用日期作为键,我确信我的 T2 表中的每个日期总会有一个唯一的记录,因为我按日期分组。
我认为问题在于记录是一个日期时间,我什至用 convert(date,M_DATE) 替换了所有 M_DATE 字段,但它什么也没改变。
注意:我正在使用 SYBASE ASE,因此无法使用窗口函数,因为此 RDMS 不支持它