簡體   English   中英

在兩個表中按日期分組的count(*)條記錄

[英]count(*) records grouped by date across two tables

我有兩個桌子:

emailLog表:

email           sendTime                   sourceTag
-------------------------------------------------------
yadda@aol.com   2016-11-17 09:14:37.213    WelcomeEmail
badda@aol.com   2016-11-16 09:14:37.213    WelcomeEmail
test@aol.com    2016-11-15 09:12:33.213    WelcomeEmail

注冊表

email           dateRegistered             regSource
-------------------------------------------------------
yadda@aol.com   2016-11-17 09:14:37.213    WelcomeEmail
badda@aol.com   2016-11-16 09:14:37.213    WelcomeEmail
test@aol.com    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
    ...

但那之后我被困住了。 任何幫助非常感謝

為了使事情簡單明了,我認為您可以創建2個臨時表。 與您已經做過的一樣,第一個將包含帶有特定sourceTag發送的電子郵件的列表,按日期分組。 第二張表將對注冊執行相同的操作。 然后,您可以內部連接2個臨時表。

您可以對這兩個表使用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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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