簡體   English   中英

T-SQL:三天內兩個日期之間的差異百分比

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM