2015-12-08 39 views
1

嗨我有一個數據庫的列包含電子郵件地址和第二列包含類別和第三列包含日期。SELECT DISTINCT在每個月內對條目進行計數。 MYSQL

我想要做的是計算多個日期範圍內類別「A」中唯一電子郵件地址的數量。所以我有這樣的:

SELECT COUNT(DISTINCT email) as counter 
FROM table 
WHERE category = "A" AND date < "2015-12" AND date > "2015-11"; 

然後我會爲第二個日期範圍做一個單獨的查詢。

現在,這裏是我的問題:

如果電子郵件地址將出現在本月之一,也是在第二個月將繼續計數兩個個月,因爲這是我在查詢範圍內是唯一的。

如何創建一個查詢,將計算不同的電子郵件地址的一年讓我們說,再算上不包括重複在一個月期間,不同的項目?

謝謝!

+0

使用'GROUP BY'? –

+0

再次混淆「一年的獨特電子郵件地址讓我們說」 - 一年中不同月份的同一電子郵件計爲一次或每個月單獨計算一次?如果你想得到正確的結果,你必須解釋你需要的非常詳細和肯定。這是編程的重要組成部分。 – BI2O2T

回答

0

如果你想自定義日期,您可以將值設置爲瓦爾

$custom_date_begin = "2015-01-10"; 
$custom_date_end = "2015-02-10"; 

那麼對於VAR和月份團的,你可以使用出頭等提供的這個

"SELECT COUNT(DISTINCT email) as counter 
FROM table 
WHERE category = 'A' 
AND date >= '$custom_begin_date' AND date <='$custom_end_date' 
group by MONTH (date);" 
+0

對不起,謝謝@ chris85我更新了答案 – scaisEdge

+0

查詢將始終返回空結果,因爲沒有日期可以滿足這個:'date <「2015-01-01」AND date>「2015-12-31」' – BI2O2T

+0

我已經更新了答案... – scaisEdge

0

信息是不夠的寫足夠的查詢。所以我會嘗試猜測細節。

讓我們假設我們需要計算每個月份和類別的唯一電子郵件數量。

查詢可能是這樣的:

SELECT dt, category, COUNT(*) AS cnt 
FROM (
    SELECT LEFT(`date`,7) AS dt, category, email 
    FROM table 
    GROUP BY LEFT(`date`,7), category, email 
) x 
GROUP BY dt, category 

如果你有變量的日期範圍,那麼你最好組每天的基礎上,再算上通過腳本通過電子郵件每個日期範圍。