簡體   English   中英

在MySQL中獲取不同的數據

[英]Getting distinct data in MySQL

目前,我正在獲取數據庫中唯一電子郵件地址的計數。

Table1
---------------------------------------------
 id    email          name      date_applied
---------------------------------------------
 1    abc@mail.com   ABC       2013-04-17
 2    bcd@mail.com   BCD       2013-04-18
 3    xyz@mail.com   XYZ       2013-04-20
 4    tre@mail.com   TRE       2013-04-28
 5    esf@mail.com   ESF       2013-04-29
 6    bcd@mail.com   BCD       2013-04-29
 7    abc@mail.com   ABC       2013-04-30
---------------------------------------------

這是關於我本周如何獲得唯一電子郵件的查詢:

select count(distinct(`A`.`email`)) as total 
from Table1 as A 
where A.date_applied BETWEEN `2013-04-29` and `2013-05-05`

Current Week: 2013-04-29 => 2013-05-05

我想要實現的是在不忽略前幾周的電子郵件的情況下,獲取當前周中新電子郵件的計數。

我急需您的幫助。

您可以通過使用如下子查詢來實現:

SELECT COUNT(DISTINCT `email`) AS Total FROM Table1 AS A 
  WHERE A.date_applied 
BETWEEN '2013-04-29' AND '2013-05-05'
    AND A.email NOT IN (SELECT email FROM Table1
                         WHERE date_applied < '2013-04-29');

結果:

| TOTAL |
---------
|     1 |

看到這個SQLFiddle


這是查詢的描述:

首先,您需要在兩個日期(即一周)之間獲取電子郵件,如下所示:

SELECT DISTINCT email FROM Table1
 WHERE date_applied BETWEEN '2013-04-29' AND '2013-05-05'

然后搜索不是唯一的電子郵件(即在上一個日期已經存在):

SELECT email 
  FROM Table1
 WHERE date_applied < '2013-04-29'

現在,使用NOT IN將那些電子郵件從當前查詢中排除:

SELECT DISTINCT `email` FROM Table1 AS A 
  WHERE A.date_applied 
BETWEEN '2013-04-29' AND '2013-05-05'
    AND A.email NOT IN (SELECT email FROM Table1
                         WHERE date_applied < '2013-04-29');

現在使用COUNT()函數來獲取電子郵件的數量。

看到這個SQLFiddle

您將要匯總。 為了獲得日期,添加了不同的電子郵件:

SELECT email, MIN(date_applied) as first
FROM Table1
GROUP BY email
HAVING first BETWEEN 2013-04-29 AND 2013-05-05

結果中的行數就是您的答案。

或使用子查詢。 我仍然必須習慣於MySQL支持它們。 :)

不過,您應該考慮一下架構設計。 我了解這可能是一個最小的示例,但date_applied並不是您的思維導圖中的applicationdate。 在您看來,此表中的email是KEY,而不是Id 為什么不使dbschema與您的思想相融合? 這樣,您的查詢將變得更簡單,更高效。

暫無
暫無

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

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