2012-05-10 50 views
2

我很困惑如何構建算法來確定我們系統中活動客戶端的平均數量。他們有各種各樣的信息存儲,身份證,聯繫開始日期,聯繫結束日期,帳戶開始和結束日期,交易日期等。不是所有人都有我可以捕獲的任何一致的日常活動。我無法弄清楚如何識別特定日期的活動客戶端數量。確定平均每日總計的SQL代碼

我不能改變數據庫的結構或修改表格,所以我需要使用我的工作。我認爲這樣做的一個想法是檢查聯繫結束日期是否大於日期X或空值 - 並檢查聯繫開始日期是否小於日期X.我插入它,但得到了我輸入的任何一天都是相同的數字。還有其他方法可以嘗試嗎?我可以添加該代碼,當我開始工作,但現在我提交這個考慮...

**對不起..我留下了一個重要的一塊。我需要能夠識別過去任何特定日子的總活動數,然後獲得一年的日均總數。我可能已經在下面的帖子的幫助下解決了這個問題的第一部分。首先我在查詢創建一個變量來保存我需要尋找... @ report_dt

and contact_end_dt >= @report_dt 
and contact_start_dt <= @report_dt 

那一塊爲我做的日期。現在我需要弄清楚如何在一年中循環遍歷這個數據,並每次增加@report_dt變量。

感謝您的所有幫助......您真棒! Doug

+0

這是SQL,不要去尋找循環。創建一個您感興趣的365/366天的表格,並加入其中。或者,合計一年內出現的所有活動日數,併除以365/366 ... * [A活躍365天,B活躍165天,C活躍200天。平均數是2.無論他們活躍在哪個日子裏,只是你計算了所涉年份的下降日期。] * – MatBailie

回答

1

如果能擴大受了一點,包括:
- 你試過,但沒有奏效
碼 - 您的桌(包括數據類型,約束的實際模式等)
- 例輸入和輸出數據

即承受,看來,你想要的是簡單的查詢...

SELECT 
    * 
FROM 
    yourTable 
WHERE 
     (contact_start_date >= CAST('20120510' AS DATETIME) OR contact_start_date IS NULL) 
    AND (contact_end_date <= CAST('20120510' AS DATETIME) OR contact_end_date IS NULL) 

(雖然你可能並不需要檢查NULL開始日期取決於您的數據的限制。)

如果複製了你已經盡力了,我會等待任何更新您的問題:)

+0

不錯......這樣做。現在我不得不每年平均工作。 – djailer

1

您可以在sysdate位於聯繫開始日期和聯繫結束日期之間進行查詢嗎?

您有Conact開始日期和聯繫結束日期,帳戶開始和結束日期。您能否依賴帳戶開始日期和結束日期中的數據?在帳戶被視爲無效之前,帳戶有多長時間沒有活動?如果你能回答這個問題,你應該能夠得到答案。

感謝, 蘇珊

0

這是一個有趣的問題。下面的查詢解決使用SQL Server和支持row_nubmer任何數據庫()的問題,假設你有啓動和停止所有日期:

with starts as 
(
    select start_date as thedate, 
     row_number() over (partition by null order by start_date) as cumstarts 
    from customers 
), 
ends as 
(
    select end_date as thedate, 
     row_number() over (partition by null order by end_date) as cumends 
    from customers 
) 
select thedate, cumstarts - cumends 
from 
(
    (select * from starts) 
    union all 
    (select * from ends) 
) t 
group by thedate 

有些數據庫直接提供累計總和,這使得它更容易。

當你在不同的日期開始和停止時,SQL Server中的問題有點詭計。

1

道格,

您還沒有提供的這是什麼意思爲客戶是沒什麼概念「活躍」。一旦你弄清楚了,你可以解決這個問題。

您可以編寫一個查詢,列出每個活動客戶一次,例如2012-05-10日期?如果是這樣,

  1. 創建日期的一個單獨的表,有一排每天(或營業日)
  2. 使用您爲2012-05-10寫了查詢,但有一個左外從加盟日期表。只選擇dateTable.theDate,按日期計數(*)和組。

如果您想要更具體的東西,請在您的問題中加入特定的內容。一個沒有單一列或表名的散亂問題不會給你帶來太多幫助。請看看這裏得到upvotes的問題。

+0

謝謝你的批評。我知道這有點含糊不清:)也許現在試圖制定一個連貫的想法還爲時過早。我知道更好,我想! – djailer