Mysql为一年和一年的数据

时间:2017-01-06 09:39:00

标签: mysql

以下是我的以下SQL查询:

SELECT count(`pd`.`email`)
FROM `social_user_login_details` AS `pd`
WHERE (DATE( db_add_date ) BETWEEN 'START-DATE' AND 'END-DATE')
GROUP BY `email`

如果我列出一年中每个月的开始日期和结束日期并计算其计算器的总数,则为6357.但如果我将开始日期定为1月1日,结束日期为12月31日,那么它显示6325.为什么不同日期的结果不同?

表格结构:

id          bigint(20)
uid         varchar(255)
user_name   varchar(150)
password    varchar(250)
email       varchar(150)
firstname   varchar(150)
lastname    varchar(150)
db_add_date date

2 个答案:

答案 0 :(得分:2)

我认为@Strawberry在头上打了一针 - 当你通过电子邮件分组时,每个独特的电子邮件都会被计算一次。如果电子邮件超过一个月发生,则会在发生的日期范围内计算。当您将整年计算在一起时,分组的电子邮件将只计算一次。

您可以尝试以下操作,它将同时显示月份和总数的总和:

SELECT count(*), month(db_add_date)
FROM `social_user_login_details` AS `pd`
WHERE (DATE( db_add_date ) BETWEEN 'START-DATE' AND 'END-DATE')
GROUP BY `email`, month(db_add_date) WITH ROLLUP

认为这将显示所有月份的总和,但我还没有机会尝试查看。

我无法想象几个月内重复删除的方式 - 显示几个月内首次出现的电子邮件地址......听起来很毛茸茸,而且......在某种程度上,错误 - 这就是其中一种情况,比如用码尺和12英寸标尺测量英格兰的海岸线,根据你测量的单位,你会得到不同的结果。

答案 1 :(得分:0)

我认为你应该把年份放在查询之间的开始和结束日期

WHERE pd.db_add_date BETWEEN #01/01/2016# AND #31/12/2016#;

或者你可以试试这个

WHERE month(pd.db_add_date) between '01' and '12'