我们正试图跟踪我们部门的应用程序和我们的单元测试使用情况,因此我创建了一个数据库来跟踪这一点。我有一个 Applications 表,起初,我在 Applications 表中创建了一个 UnitTests 列,但我只是意识到,只需将其保持在它将覆盖该应用程序的单元测试历史记录的日期。
由于我希望能够随时间提取此处的数据以生成显示进度的图表,我意识到我需要一个名为 UnitTestTracking 的单独表格,其中包含以下列:
- ID(主键)
- application_ID(int)\
- 添加日期(日期时间)
- 单元测试计数(整数)
这样,人们可以每周一次或每月一次在此表中添加新条目,我们将有一个随时间推移的历史记录,以显示每个应用程序的进度以及所有应用程序的总数。
现在的一个问题是:由于不同的应用程序会在不同的时间向该表中添加条目,因此我将如何针对该表编写查询以获取所有应用程序的总计数?
本质上(在伪 SQL 中)我需要这样的东西:
“选择所有应用程序的单元测试计数,其中应用程序 data_added 是为该应用程序 ID 添加的最新日期”
您将如何编写此查询?
请您参考如下方法:
我认为人们似乎比实际情况更难做到这一点。
要解决这个问题,您需要两个查询:
- 为我找到每个应用程序 ID 的最新条目
- 使用每个应用程序 ID 的最新条目给我单元测试计数的总和。
第一个 SQL 是:
SELECT application_ID, MAX(date_added) AS lastDateAdded FROM UnitTestTracking GROUP BY application_ID
第二,我们通过嵌套查询来完成这项工作:
SELECT
SUM(unittestcount)
FROM
UnitTestTracking JOIN
(SELECT
application_ID, MAX(date_added) AS lastDateAdded
FROM
UnitTestTracking GROUP BY application_ID) T
ON UnitTestTracking.application_ID = T.application_ID AND
UnitTestTracking.date_added = T.LastDateAdded
这应该会为您提供所需的信息,即当前的单元测试总数。