我正在尝试根据域名按月过滤日期。以下是数据示例;
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 |发布于 2016-03-21 01:43:56
我猜这能行得通:
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;发布于 2016-03-21 02:15:25
正如其他人已经指出的,你应该在字符串中使用单引号‘或双引号",如果列名称与关键字冲突,如日期或组,则需要反引号`。
这听起来像是在尝试按年、月和域进行分组。我说的对吗?如果是这样的话,您的查询可能如下所示:
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`;发布于 2016-03-21 12:18:40
感谢大家,sql已经成功运行了!
然而,我没有得到日期。
| domain | count | date |
----------------------------------
| User1 | 3 | YYYY-MM |
| User2 | 1 | YYYY-MM |它返回的'YYYY-MM‘不像实际的数字(例如: 2016-01'),而且我不能每月获取它,而只能像上面那样为每个域名获取一次。
有人知道要添加或编辑什么吗?
https://stackoverflow.com/questions/36117095
复制相似问题