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]