1

这是 job_form 表...

job_num  | name | address |
---------+------+---------+
 1       | Tom  | Smith   |
 2       | John | Doe     |
 3       | Max  | Smith   |

这是 individual_job 表...

job_num  | date       | description   |
---------+------+---------------------+
 1       | 23-01-2012 | Eat food      |
 1       | 24-01-2012 | Do dishes     |
 1       | 25-01-2012 | Sweep floor   |
 ...     | ...        | ...           |
 2       | 19-05-2013 | Play games    |
 2       | 23-05-2013 | Do code       |
 2       | 27-05-2013 | Sleep         |
 ...     | ...        | ...           |
 3       | 23-05-2013 | Eat food      |
 3       | 24-05-2013 | Do dishes     |
 3       | 25-05-2013 | Sweep floor   |
 ...     | ...        | ...           |

我想创建一个查询,为每个 job_form 提取一行,其中包括要完成的第一个工作的日期、要完成的最后一个工作的日期以及表格上列出的工作总数。查询只需要显示具有将来需要完成的工作的工作表。

示例是:

job_num  |  first_job_date  |  last_job_date  |  count_of_jobs  |  name
---------+------------------+-----------------+-----------------+-------------
2        |  19-05-2013      |  27-05-2013     |  3              |  John
3        |  23-05-2013      |  25-05-2013     |  3              |  Max

我已经有几年没有做过 SQL 了,而这个让我完全难住了。我知道我必须进行嵌套查询,但无法计算出顺序...

非常感谢任何帮助。

更新为在结果中包含名称列(忘记了,抱歉)

4

2 回答 2

3

这是一个简单的聚合查询:

select ij.job_num,
       min(ij.date) as first_job_date,
       max(ij.date) as last_job_date, count(*) as count_of_jobs
from individual_job ij
group by ij.job_num

对于未来的工作,您需要进行日期比较,如下所示(取决于数据库):

where date >= sysdate

或者

where date >= now()

或者

where date >= getdate()

where子句在子句之后from

于 2013-05-09T14:01:40.613 回答
0

编辑根据 Gordon,如果您不需要任何job_form特定字段,则无需加入。但是,如果您这样做(例如姓名或地址),那么:

SELECT jf.job_id,
       jf.name, 
       MIN(ij.date) AS first_job_date, 
       MAX(ij.date) as last_job_date, 
       COUNT(*) as count_of_jobs
FROM job_form jf
  INNER JOIN individual_job ij
    ON jf.job_num = ij.job_num
GROUP BY jf.job_id, jf.name -- i.e. non-aggregated select fields here
于 2013-05-09T14:02:20.473 回答