T-SQL:三天内两个日期之间的差异

T-SQL:三天内两个日期之间的差异,sql,sql-server,ssms,Sql,Sql Server,Ssms,我试图计算出两个日期之间的百分比差异,下面是一个目前效果很好的示例: SELECT (SELECT COUNT(mp.RETURN_INTERVIEW_ACCEPTED) * 100.00 FROM Child_Social.FACT_MISSING_PERSON AS mp WHERE mp.RETURN_INTERVIEW_ACCEPTED LIKE 'Y' AND CAST (mp.END_DTTM AS DATE) BE

我试图计算出两个日期之间的百分比差异,下面是一个目前效果很好的示例:

SELECT (SELECT COUNT(mp.RETURN_INTERVIEW_ACCEPTED) * 100.00 
        FROM Child_Social.FACT_MISSING_PERSON AS mp
        WHERE mp.RETURN_INTERVIEW_ACCEPTED LIKE 'Y'
        AND CAST (mp.END_DTTM AS DATE) 
        BETWEEN DATEADD(YY, -1, CAST (GETDATE() AS DATE)) AND CAST (GETDATE() AS DATE))
        /
        (SELECT COUNT(mp.RETURN_INTERVIEW_OFFERED)
        FROM Child_Social.FACT_MISSING_PERSON AS mp
        WHERE mp.RETURN_INTERVIEW_OFFERED LIKE 'Y'
        AND CAST (mp.END_DTTM AS DATE) 
        BETWEEN DATEADD(YY, -1, CAST (GETDATE() AS DATE)) AND CAST (GETDATE() AS DATE))
--Subquery to determine % between # of interviews offered vs # of interviews accepted
    FROM Child_Social.FACT_MISSING_PERSON AS mp
    WHERE CAST (mp.END_DTTM AS DATE) 
        BETWEEN DATEADD(YY, -1, CAST (GETDATE() AS DATE)) AND CAST (GETDATE() AS DATE)
在上面,我接受了一年内接受的所有面试,并将其除以该年内提供的面试次数。使用查询后面的数字,这为我生成了58%:

SELECT 426 * 100.00 / 725
然而,在一个稍微不同的查询中使用相同的原理,我并没有得到预期的数字。我希望看到这个,它产生50.90%:

SELECT 253 * 100.00 / 497

但我一直得到1分?以下查询的最大区别在于,我试图确定在结束日期end_DTTM的三天内进行了多少次访谈的百分比,因此在第二个查询中,您正在进行所有整数运算,因为您要乘以100,而不是第一个查询中的100.00

如果在第二个查询中乘以100.00,您会得到什么答案

另外,如果你分别选择分子和分母,你会得到预期的数字吗

选择COUNTmp.RETURN\u面试日期,/**100*/ 选择COUNTmp.RETURN\u面试日期 来自Child_Social.FACT_失踪者作为议员 何处铸造mp.END\U DTTM作为日期 在DATEADDYY,-1之间,将GETDATE转换为DATE,将GETDATE转换为DATE和
DATEDIFFDAY,mp.END\u DTTM,mp.RETURN\u INTERVIEW\u DATE这就是我想要的解决方案。从本质上讲,这是关于在声明的前面创建WHERE子句,以得出三天内的采访次数。在我最初的询问中,我试图向比尔问好,谢谢你的回答,我通过自己的努力解决了这个问题
SELECT COUNT(mp.RETURN_INTERVIEW_DATE) * 100  /
    (SELECT COUNT(mp.RETURN_INTERVIEW_DATE) 
        FROM Child_Social.FACT_MISSING_PERSON AS mp
        WHERE CAST (mp.END_DTTM AS DATE) 
        BETWEEN DATEADD(YY, -1, CAST (GETDATE() AS DATE)) AND CAST (GETDATE() AS DATE) AND
        (DATEDIFF(DAY, mp.END_DTTM, mp.RETURN_INTERVIEW_DATE)) <=3) 
    FROM Child_Social.FACT_MISSING_PERSON AS mp
    WHERE CAST (mp.END_DTTM AS DATE) 
        BETWEEN DATEADD(YY, -1, CAST (GETDATE() AS DATE)) AND CAST (GETDATE() AS DATE)
,(SELECT COUNT(mp.RETURN_INTERVIEW_ACCEPTED) * 100 AS IntWithin3Days
    FROM Child_Social.FACT_MISSING_PERSON AS mp
    WHERE (DATEDIFF(DAY, mp.END_DTTM, mp.RETURN_INTERVIEW_DATE)) <=3
    AND CAST (mp.END_DTTM AS DATE) 
    BETWEEN DATEADD(YY, -1, CAST (GETDATE() AS DATE)) AND CAST (GETDATE() AS DATE))
    /
(SELECT COUNT(mp.RETURN_INTERVIEW_OFFERED) AS TotalInt
    FROM Child_Social.FACT_MISSING_PERSON AS mp
    WHERE mp.RETURN_INTERVIEW_OFFERED LIKE 'Y'
    AND CAST (mp.END_DTTM AS DATE) 
    BETWEEN DATEADD(YY, -1, CAST (GETDATE() AS DATE)) AND CAST (GETDATE() AS DATE)) AS [Percentage of Interviews Within 3 Days]