如何在mysql之间使用

时间:2016-03-20 17:34:25

标签: mysql sql

我正在尝试根据域名按月过滤日期。 这是数据样本;

Domain - id:1,2

域名 - 标签:User1,User2

Fact_data - domain_id:1,2

Fact_data - 日期:从'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`;

我希望结果像;

|   domain  |   count   |   date   |
 ----------------------------------
|   User1   |     3     | 2016-01  |
|   User2   |     1     | 2016-01  |
|   User1   |     2     | 2016-02  |
|   User1   |     1     | 2016-03  |
|   User2   |     2     | 2015-03  |

3 个答案:

答案 0 :(得分:0)

我猜这会奏效:

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;

答案 1 :(得分:0)

正如其他人已经指出的那样,你应该使用单个,&#39;或双,&#34;,带字符串的引号。列名称需要反引号,`,如果它们与关键字冲突,例如DATE或GROUP。

听起来你正在尝试GROUP BY年和月,以及域名。我对么?如果是这样,您的查询应该看起来像这样:

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`;

您的问题标题表明您要使用BETWEEN。在这种情况下,您的查询将如下所示:

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`;

答案 2 :(得分:0)

多亏大家,sql已成功运行!

然而,我无法得到日期

|   domain  |   count   |   date   |
 ----------------------------------
|   User1   |     3     | YYYY-MM  |
|   User2   |     1     | YYYY-MM  |

它返回'YYYY-MM'不像实际数字(ex; 2016-01') 而且我每个月都无法得到它,但只是像上面一样只为每个域获取

有谁知道要添加或编辑的内容?