首页 > 解决方案 > SQL COUNT 具有相同或更小的值的所有行

问题描述

我对 Access 和 SQL 很陌生。我有两列日期。我试图为第一列中的每个日期获取第一列中具有相同或更早日期和第二列中较晚日期的单元格数量。

我的表:

|---------------------|---------------------|------------------|
|    Incident Nr.     |    Incident Date    |  Completion Date |
|---------------------|---------------------|------------------|
|          1          |      25.09.2007     |     31.10.2007   |
|---------------------|---------------------|------------------|
|          2          |      26.09.2007     |     01.11.2007   |
|---------------------|---------------------|------------------|
|          3          |      26.09.2007     |     04.12.2007   |
|---------------------|---------------------|------------------|
|          4          |      30.11.2007     |                  |
|---------------------|---------------------|------------------|

我的目标:

|---------------------|------------------|
|        Date         |  Open Incidents  |
|---------------------|------------------|
|      25.09.2007     |         1        |
|---------------------|------------------|
|      26.09.2007     |         3        |
|---------------------|------------------|
|      30.11.2007     |         2        |
|---------------------|------------------|

我尴尬的尝试是:

SELECT [Incident Date], (SELECT COUNT([Incident Date]) FROM MyTable WHERE [Incident Date] <= [Incident Date]) AS [Open Incidents]
FROM MyTable
GROUP BY [Incident Date];

非常感谢!

标签: sqlms-access

解决方案


我认为你的方法实际上非常好。但 。. .

SELECT t.[Incident Date],
       (SELECT COUNT(*)
        FROM MyTable as t2
        WHERE t2.[Incident Date] <= t.[Incident Date] AND
              (t2.[Completion Date] >= t.[Incident Date] OR t2.[Completion Date] IS NULL)
       ) AS [Open Incidents]
FROM MyTable as t
GROUP BY t.[Incident Date];

请注意表别名的使用,以便清楚列引用是针对内部查询还是外部查询。


推荐阅读