如何计算仅返回最新项目的所有子查询结果?

时间:2018-08-14 03:11:19

标签: sql sqlite

在这篇文章(Adding a Query to a Subquery then produces no results)中,@ D-Shih提供了一个很好的解决方案,我想扩展一下。

即使子查询仅找到最后一个,我如何将返回的结果添加到该教师的报告计数中?

我正在尝试解决下面的<???> AS CountOfReports,行,但是我的SQL技能不是那么出色。

SELECT 
    t.NAME,
    t1.REPORTINGTYPE,
     <???> AS CountOfReports,     <<<< ****
    t1.REPORTINGPERIOD 
FROM 
    teachers AS t 
INNER JOIN
    (SELECT 
         *,
         (SELECT COUNT(*) FROM REPORTS tt 
          WHERE tt.TEACHER_ID = t1.TEACHER_ID 
            AND tt.REPORTINGPERIOD >= t1.REPORTINGPERIOD) rn
     FROM 
         REPORTS t1) AS t1 ON t1.TEACHER_ID = t.id AND rn = 1
ORDER BY 
    t.NAME

1 个答案:

答案 0 :(得分:1)

您可以使用correlated subquery计算计数:

SELECT t.Name,
       r.ReportingType,
       max(r.ReportingPeriod),
       (SELECT count(*)
        FROM Reports r2
        WHERE r2.Teacher_ID = r.Teacher_ID
       ) AS Reports
FROM Teachers t
JOIN Reports r ON t.ID = r.Teacher_ID
GROUP BY r.Teacher_ID;
NAME            REPORTINGTYPE  max(r.ReportingPeriod)  Reports   
--------------  -------------  ----------------------  ----------
Mr John Smith   Final          2017-03                 3         
Ms Janet Smith  Draft          2018-07                 2