You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL查询实现:统计各项目每个审批日期前的累计测试数量

实现需求的SQL方案

默认你两张表的表名分别为project_approvals(存项目审批记录)、project_tests(存项目测试记录),如果实际表名不同替换即可。

核心逻辑说明

因为两张表的日期字段都是MM/DD/YYYY格式的字符串,所以需要先转换为日期类型才能做大小比较,再关联两张表按项目、审批日期分组统计符合条件的测试记录数即可。


通用实现写法(关联分组方式,兼容性最好)

以下以MySQL语法为例,不同数据库仅需调整日期转换函数:

SELECT 
    pa.PROJECT,
    pa.APPROVAL_DATE,
    COUNT(pt.TEST_DATE) AS TOTAL_TESTS_BEFORE_APPROVAL_DATE
FROM 
    project_approvals pa
LEFT JOIN 
    project_tests pt 
    ON pa.PROJECT = pt.PROJECT
    AND STR_TO_DATE(pt.TEST_DATE, '%m/%d/%Y') < STR_TO_DATE(pa.APPROVAL_DATE, '%m/%d/%Y')
GROUP BY 
    pa.PROJECT,
    pa.APPROVAL_DATE
ORDER BY 
    pa.PROJECT,
    STR_TO_DATE(pa.APPROVAL_DATE, '%m/%d/%Y');

其他写法(关联子查询,逻辑更直观)

SELECT 
    pa.PROJECT,
    pa.APPROVAL_DATE,
    (
        SELECT COUNT(*) 
        FROM project_tests pt 
        WHERE pt.PROJECT = pa.PROJECT 
        AND STR_TO_DATE(pt.TEST_DATE, '%m/%d/%Y') < STR_TO_DATE(pa.APPROVAL_DATE, '%m/%d/%Y')
    ) AS TOTAL_TESTS_BEFORE_APPROVAL_DATE
FROM 
    project_approvals pa
ORDER BY 
    pa.PROJECT,
    STR_TO_DATE(pa.APPROVAL_DATE, '%m/%d/%Y');

不同数据库的日期转换适配

  • Oracle/PostgreSQL:将STR_TO_DATE替换为TO_DATE,格式参数保持'MM/DD/YYYY'即可
  • SQL Server:将STR_TO_DATE(字段名, '%m/%d/%Y')替换为CONVERT(DATE, 字段名, 101)

如果你的表中日期字段本身就是日期类型而非字符串,直接去掉转换函数,直接比较pt.TEST_DATE < pa.APPROVAL_DATE即可。

内容的提问来源于stack exchange,提问作者user3495042

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 02:45:06