[英]T-SQL: % difference between two dates within three days
我正在嘗試計算兩個日期之間的百分比差異,這是一個目前完美運行的示例:
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) 的三天內進行了多少次采訪的百分比,因此 <=3 子句,我想這是導致問題的原因
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)
我有點難過,我嘗試了一些不同的東西,但我無法讓它工作,任何幫助將不勝感激!
謝謝
在您的第二個查詢中,您正在執行所有 integer 數學運算,因為您乘以100
而不是第一個查詢中的100.00
。
如果在第二個查詢中乘以100.00
,您會得到什么答案?
另外,如果您將 select 分別作為分子和分母,您會得到預期的數字嗎?
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)
這就是為我提供我想要的解決方案的原因。 本質上,它是關於在聲明的前面創建 WHERE 子句,以得出三天內的采訪次數。 在我的原始查詢中,我試圖在查詢結束而不是開始時 <=3,因此為什么它一直為我生成錯誤的數字
簡而言之,此查詢生成: SELECT 724 / 253
= 34%
,(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]
-- 用於確定 3 天內面試百分比的子查詢
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.