【发布时间】:2026-01-13 07:35:01
【问题描述】:
我正在尝试生成一个聚合表。
假设这是我的 tblA。
| type | name | timestap |
|------|------|---------------------|
| prod | t1 | 2020-06-01 01:00:00 |
| prod | t2 | 2020-06-01 01:00:02 |
| prod | t3 | 2020-06-01 01:00:03 |
| test | t4 | 2020-06-01 02:20:02 |
| test | t5 | 2020-06-01 02:20:03 |
和tblB
| tid | starttime | name | subtask | maintask |
|-----|---------------------|------|---------|----------|
| 1 | 2020-06-01 01:10:00 | t1 | 5 | 10 |
| 1 | 2020-06-01 01:10:00 | t1 | 6 | 10 |
| 1 | 2020-06-01 01:10:00 | t1 | 7 | 10 |
| 1 | 2020-06-01 01:10:00 | t1 | 8 | 10 |
| 2 | 2020-06-01 00:01:00 | t1 | 3 | 10 |
| 2 | 2020-05-01 00:02:00 | t1 | 5 | 15 |
| 4 | 2020-06-01 01:00:00 | t2 | 10 | 10 |
| 5 | 2020-06-01 11:00:10 | t2 | 10 | 20 |
| 5 | 2020-06-01 11:00:10 | t2 | 11 | 20 |
| 5 | 2020-06-01 11:00:10 | t2 | 12 | 20 |
现在我需要创建一个包含子任务和主要任务总和的报告表。但是有 where 条件,我们需要为每个名称选择 starttime 大于 tblA 时间戳的 tid,subtask,maintask。然后进行 SUM。
预期输出:
| type | name | sum_of_subtask | sum_of_maintask | diff |
|------|------|----------------|-----------------|------|
| prod | t1 | 26 | 40 | 14 |
| prod | t2 | 33 | 60 | 27 |
对于 t1,tid 为 1,因为它的开始时间是 > tblA.timestamp
对于t2,tid为5,tblB.starttime > tblA.timestamp
我要选择的行的另一个条件是
MAX(tid) where starttime is > tblA.timestamp。
然后获取行并求和,找出 diff 列上 sum_of_subtask,sum_of_maintask 之间的差异。
我不知道怎么写这个逻辑。
【问题讨论】:
标签: sql postgresql join