我正在尝试根据域名按月过滤日期。 这是数据样本;
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 |
答案 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') 而且我每个月都无法得到它,但只是像上面一样只为每个域获取
有谁知道要添加或编辑的内容?