好的我有这个查询可以很好地将2列组合在一起:
SELECT search_query_keyword, search_query_date, COUNT(1) as count
FROM search_queries
WHERE search_query_date >= '.$from.' AND search_query_date <= '.$to.'
GROUP BY search_query_keyword, search_query_date
ORDER BY count DESC
LIMIT 10
但是如果我想按日期RANGE分组而不仅仅是约会呢?有没有办法做到这一点?
谢谢!
编辑:好的,这些答案非常复杂,我认为我想要的更容易实现,所以让我重新解释一下。我想在一段时间内选择关键字“&gt; = 20090601 AND&lt; = 20090604”。但不是重复关键字我宁愿只得到关键字盎司和它发生了多少次。例如,而不是:
keyword: foo
keyword: foo
keyword: foo
keyword: bar
keyword: bar
我会得到:
keyword: foo, count: 3
keyword: bar, count: 2
答案 0 :(得分:3)
我不完全确定日期范围分组 - 你必须定义你想要的日期范围,然后你可以联合这些查询:
SELECT
'Range 1' AS 'date_range',
search_query_keyword
FROM search_queries
WHERE search_query_date >= '.$fromRange1.' AND search_query_date <= '.$toRange1.'
UNION
SELECT
'Range 2' AS 'date_range',
search_query_keyword
FROM search_queries
WHERE search_query_date >= '.$fromRange2.' AND search_query_date <= '.$toRange2.'
GROUP BY 1,2
或者如果你想把它们放在像“30天,60天等”那样多天的分组中,你可以这样做:
SELECT
(DATEDIFF(search_query_date, NOW()) / 30) AS date_group,
search_query_keyword
FROM search_queries
GROUP BY date_group, search_query_keyword
编辑:根据您提供的更多信息,此查询应生成您想要的内容:
SELECT
search_query_keyword,
COUNT(search_query_keyword) AS keyword_count
FROM search_queries
WHERE search_query_date >= '.$from.' AND search_query_date <= '.$to.'
GROUP BY search_query_keyword
答案 1 :(得分:2)
您可以对CASE语句或函数的结果进行分组。例如:
SELECT search_query_keyword, QUARTER(search_query_date), COUNT(1) as count
FROM search_queries
WHERE search_query_date >= '.$from.' AND search_query_date <= '.$to.'
GROUP BY search_query_keyword, QUARTER(search_query_date)
ORDER BY count DESC
答案 2 :(得分:0)
查看不同的基于DATE的函数,并根据它构建,例如
select YEAR( of your date ) + MONTH( of your date ) as ByYrMonth
但上述情况下的结果需要转换为字符,以防止2009年+ 1月(第1个月)= 2010年也错误地与2008 + 2月(第2个月)= 2010年等组合... ...字符串最终应该像:
...
200811
200812
200901
200902
200903
...
如果你想通过日历Quarters,你必须做(月-1)的INTEGER除以4,所以......
Jan (-1) = 0 / 4 = 0
Feb (-1) = 1 / 4 = 0
Mar (-1) = 2 / 4 = 0
Apr (-1) = 3 / 4 = 0
May (-1) = 4 / 4 = 1
June (-1)= 5 / 4 = 1 ... etc...
是的,前一个示例明确引用了处理更好的QUARTER()函数,但是如果还基于老化,例如30,60,90天,您可以应用上面的类似数学但是除以30为你的基团。