join

dwbf0jvd  于 2021-08-09  发布在  Java
关注(0)|答案(1)|浏览(334)

我正在尝试生成一个聚合表。
假设这是我的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条件,我们需要选择tid,subtask,maintask,其中starttime大于每个名称的tbla时间戳。然后求和。

预期产量:

| 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列上的子任务的和与主任务的和之间的差异。
我不知道怎么写这个逻辑。

4c8rllxm

4c8rllxm1#

你需要简单的 join 以及 sum 用于聚合。这是演示。

select
  type,
  ta.name,
  sum(subtask) as sum_of_subtask,
  sum(maintask) as sum_of_maintask,
  sum(maintask - subtask) as diff
from tblA ta
join tblB tb
on ta.name = tb.name
where starttime > timestap
group by
  type,
  ta.name;

输出:

| type | name | sum_of_subtask | sum_of_maintask | diff |
| ---- | ---- | -------------- | --------------- | ---- |
| prod | t1   | 26             | 40              | 14   |
| prod | t2   | 33             | 60              | 27   |

相关问题