2016-11-29 24 views
0

我有兩個表分組的記錄:COUNT(*)按日期橫跨兩個表

emailLog表:

email   sendTime     sourceTag 
------------------------------------------------------- 
[email protected] 2016-11-17 09:14:37.213 WelcomeEmail 
[email protected] 2016-11-16 09:14:37.213 WelcomeEmail 
[email protected] 2016-11-15 09:12:33.213 WelcomeEmail 

註冊表:

email   dateRegistered    regSource 
------------------------------------------------------- 
[email protected] 2016-11-17 09:14:37.213 WelcomeEmail 
[email protected] 2016-11-16 09:14:37.213 WelcomeEmail 
[email protected] 2016-11-15 09:12:33.213 WelcomeEmail 

我試圖執行聯合查詢,以顯示在給定日期收到電子郵件的人與COUNT()的COUNT()比較德隆誰已登記在給定日期

我已經儘量得到就象這樣:

SELECT 
    CONVERT(varchar(10), sendTime, 120) as date, 
    COUNT(*) as numberSent 
    FROM emailLog 
WHERE sourceTag = 'WelcomeEmail' 
AND 
sendTime BETWEEN '20161110' and '20161120' 
GROUP BY 
    CONVERT(varchar(10), sendTime, 120) 
ORDER BY DATE ASC; 

,給了我一個特定sourceTag發送的電子郵件的列表,通過日期分組:

DATE    NUMBERSENT 
2016-11-17   256 
2016-11-18   136 
2016-11-19   40 
2016-11-20   118 
2016-11-21   186 

但我無法弄清楚如何加入註冊的總和與來源,日期+,如:

DATE    NUMBERSENT MEMBERSREGISTERED 
2016-11-17   256   12 
2016-11-18   136   24 
2016-11-19   40   13 
2016-11-20   118   2 
2016-11-21   186   11 

我曾試圖做類似...

SELECT 
(SELECT count(*) from emailLog) 
    as emailLogResults, 
(select count(*) from registrations) 
    as registrationResults 
    ... 

但是我被卡住之後。非常感謝的任何幫助

+0

我刪除了不兼容的數據庫標籤。請標記您真正使用的數據庫。 –

回答

0

使用這兩個表可以使用full join(當兩個表中的某個特定日期沒有行時,從另一個表中獲取行),然後使用條件聚合。

SELECT 
    COALESCE(CONVERT(varchar(10), e.sendTime, 120),CONVERT(varchar(10), r.dateRegistered, 120)) as date, 
    COUNT(e.email) as numberSent, 
    COUNT(r.email) as membersRegistered 
FROM emailLog e 
FULL JOIN registrations r ON e.sendTime = r.dateRegistered 
AND e.sourceTag = 'WelcomeEmail' 
AND r.regSource = 'WelcomeEmail' 
AND e.sendTime BETWEEN '20161110' and '20161120' 
AND r.dateRegistered BETWEEN '20161110' and '20161120' 
GROUP BY COALESCE(CONVERT(varchar(10), e.sendTime, 120),CONVERT(varchar(10), r.dateRegistered, 120)) 
ORDER BY DATE ASC 
+0

我也想到了這一點,但是你將日期記錄在'emailLog'上。如果在特定日期沒有電子郵件註冊,該怎麼辦? –

+0

@WEI_DBA ..還有一個註冊日期過濾器。 –

+0

是的......猜我是在更廣泛的意義上思考。 :-) –

1

爲了簡單明瞭,我想你可以創建2個臨時表。第一個將包含使用特定sourceTag發送的電子郵件列表,按日期分組,如您已經完成的那樣。第二個表格將爲註冊做同樣的事情。你可以比內部加入2個臨時表。