我有两张桌子——一张用于 Jobs,另一张用于 Connections。一份工作可以有很多联系。Connetion 的 PK 是 connid + timestamp,它有一个外键(JOBID)指向 Job 的 JOBID。
JOBID | NAME
-------+-------
id1 | Name of Job 1
id2 | Job 2's Name
CONNID | TIMESTAMP | JOBID | AMOUNT
-------+-------+--------+----------
012 | doesn't | id1 | 11
012 | matter | id1 | 15
012 | | id1 | 20
012 | | id1 | 30
020 | | id1 | 2
020 | | id1 | 5
549 | | id2 | 19
549 | | id2 | 30
549 | | id2 | 50
549 | | id2 | 57
549 | | id2 | 60
所以我想要做的是,从连接表中,获取每个作业的每个连接的范围的总和。所以对于job-id1,我想要(30-11)+(5-2),即22,对于job-id2,我想要(60-19),即41。现在我可以弄清楚如何做最大值减去最小值对于每个连接...
SELECT
CONNID ,
MAX(AMOUNT) - MIN(AMOUNT) AS range
FROM Connection
GROUP BY CONNID
...但我对 sql 还不够熟悉,无法弄清楚我还需要什么(就像几年前我在大学里上过一门数据库课一样)。除此之外,我希望它按作业名称排序,因为我必须从作业表中获取它,所以我确信这会增加一个完整的“另一层复杂性”。
基本上,我希望结果集看起来像
NAME | range
--------------+------
Name of Job 1 | 22
Job 2's Name | 41
最后,我希望能够在最后 24 小时内执行此操作,但这应该只是在其中添加一个 WHERE 子句,这应该非常简单。
我希望的答案将包含一个查询,它只是对带有 JOBID 的 Connection 表的查询(所以不用担心答案第一部分的作业名称),然后是我实际正在寻找的查询这给了我上面的结果集,这样我就可以明确地看到到达那里所需的额外步骤。