【发布时间】:2022-01-20 06:48:58
【问题描述】:
我目前正在处理 Sybase ASE rdms,并且我的下表 (JOB_AUDIT) 中填充了示例数据集:
| IDJOB | BATCH | M_DATE | START_TIME | ENDTIME |
|---|---|---|---|---|
| 1 | A | 12-25-2012 00:00:00 | 40100 | 40110 |
| 2 | A | 12-25-2012 00:00:00 | 40111 | 40118 |
| 3 | B | 12-25-2012 00:00:00 | 40118 | 40129 |
| 4 | A | 12-27-2012 00:00:00 | 40100 | 40112 |
| 5 | A | 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 | total |
|---|---|
| 12-25-2012 00:00:00 | 28 |
| 12-27-2012 00:00:00 | 31 |
那么决赛桌应该是这样的:
| Batch_DATE | Batch | Nb_jobs | Exec_Duration | pct |
|---|---|---|---|---|
| 12-25-2012 00:00:00 | A | 2 | 17 | 0.607 |
| 12-25-2012 00:00:00 | B | 1 | 11 | 0.393 |
| 12-27-2012 00:00:00 | A | 2 | 17 | 0.548 |
| 12-27-2012 00:00:00 | C | 1 | 14 | 0.452 |
但似乎连接不起作用,因为我有以下结果:
| Batch_DATE | Batch | Nb_jobs | Exec_Duration | pct |
|---|---|---|---|---|
| 12-25-2012 00:00:00 | A | 2 | 17 | 0.607 (17/28) |
| 12-25-2012 00:00:00 | A | 2 | 17 | 0.548 (17/31) not correct |
| 12-25-2012 00:00:00 | B | 1 | 11 | 0.393 (11/28) |
| 12-25-2012 00:00:00 | B | 1 | 11 | 0.355 (11/31) not correct |
| 12-27-2012 00:00:00 | A | 2 | 17 | 0.607 (17/28) not correct |
| 12-27-2012 00:00:00 | A | 2 | 17 | 0.548 (17/31) |
| 12-27-2012 00:00:00 | C | 1 | 14 | 0.500 (14/28) not correct |
| 12-27-2012 00:00:00 | C | 1 | 14 | 0.452 (14/31) |
所以,我想知道为什么我不能使用日期作为键,我确信在我按日期分组时,我的 T2 表中的每个日期总会有一条唯一记录。
我认为问题在于记录是一个日期时间,我什至用 convert(date,M_DATE) 替换了所有 M_DATE 字段,但它什么也没改变。
注意:我正在使用 SYBASE ASE,因此我无法使用窗口函数,因为此 RDMS 不支持它
【问题讨论】:
-
T1.M_BATCH来自哪里?你的意思是T1.BATCH?如果您为 minimal, reproducible example 提供 DDL/DML,这将更容易解决
标签: sql datetime primary-key sybase ase