如何在mysql中使用中间层

如何在mysql中使用中间层,mysql,sql,Mysql,Sql,我正在尝试根据域按月筛选日期。 这是数据样本 域-id:1,2 域-标签:User1,User2 事实数据域id:1,2 事实数据-日期:从“2016-01-01”到“2016-03-20”不等 这是我尝试过的sql,但不知怎的它有错误 SELECT d.label, COUNT(*) AS count, date_format(f.date, 'YYYY-MM') AS date FROM domain d, fact_data f WHERE f.domain_id = d.id AND

我正在尝试根据域按月筛选日期。 这是数据样本

域-id:1,2

域-标签:User1,User2

事实数据域id:1,2

事实数据-日期:从“2016-01-01”到“2016-03-20”不等

这是我尝试过的sql,但不知怎的它有错误

SELECT d.label, COUNT(*) AS count, date_format(f.date, 'YYYY-MM') AS date
FROM domain d, fact_data f 
WHERE f.domain_id = d.id
AND f.date >= `2016-01-01` AND f.date <=`2016-01-31`
GROUP BY `domain_id`;

我猜这会有用的:

SELECT d.label,
       COUNT(*) AS count,
       date_format(f.date, 'YYYY-MM') AS `date`
  FROM domain d JOIN fact_data f ON f.domain_id = d.id
 WHERE f.date >= '2016-01-01' AND f.date <='2016-01-31'
 GROUP BY d.label;
选择d.label,
计数(*)作为计数,
日期\格式(f.date,'YYYY-MM')为'date`
从域d连接f上的事实数据f。域id=d.id

其中f.date>='2016-01-01'和f.date正如其他人已经指出的,您应该使用带字符串的单引号',或双引号。如果列名与关键字(如日期或组)冲突,则需要反勾'

听起来您正在尝试按年份、月份以及域进行分组。我是否正确?如果是,您的查询可能如下所示:

SELECT d.label, COUNT(*) AS count, date_format(f.date, 'YYYY-MM') AS `date`
FROM domain d, fact_data f 
WHERE f.domain_id = d.id
AND f.date >= '2016-01-01' AND f.date <='2016-01-31'
GROUP BY year(`date`), month(`date`), `domain_id`;
SELECT d.label, COUNT(*) AS count, date_format(f.date, 'YYYY-MM') AS `date`
FROM domain d, fact_data f 
WHERE f.domain_id = d.id
AND f.date BETWEEN '2016-01-01' AND '2016-01-31'
GROUP BY year(`date`), month(`date`), `domain_id`;

感谢大家,sql已经成功运行了

然而,我无法得到日期

|   domain  |   count   |   date   |
 ----------------------------------
|   User1   |     3     | YYYY-MM  |
|   User2   |     1     | YYYY-MM  |
它返回的“YYYY-MM”与实际数字不同(例如:2016-01) 我不能每个月得到一次,但每个域只有一次,如上所述


有人知道要添加或编辑什么吗?

您遇到了什么错误?在
和f.date>=…
子句中使用常规的勾号
而不是反勾号。反勾号用于列/表/数据库名称。MySQL使用反勾号引用数据库、表和字段名称。我希望您的实际查询看起来不像您发布在这里。使用e用撇号(
)或双引号(
)将字符串括起来。
|   domain  |   count   |   date   |
 ----------------------------------
|   User1   |     3     | YYYY-MM  |
|   User2   |     1     | YYYY-MM  |