2

好的,我有这个查询可以很好地将 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

但是,如果我想按日期范围而不是仅按日期分组怎么办?有没有办法做到这一点?

谢谢!

编辑:好的,这些答案非常复杂,我认为我想要的可以更容易地实现,所以让我重新解释一下。例如,我想在一段时间内选择关键字 ">= 20090601 AND <= 20090604"。但是,与其获取重复的关键字,我宁愿只获取关键字盎司以及它出现的次数。因此,例如,而不是这个:

keyword: foo
keyword: foo
keyword: foo
keyword: bar
keyword: bar

我会得到:

keyword: foo, count: 3
keyword: bar, count: 2
4

3 回答 3

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
于 2009-06-04T18:14:20.643 回答
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
于 2009-06-04T17:52:00.727 回答
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
...

如果您想要按日历季度,则必须将(月-1)的整数除以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。

于 2009-06-04T18:32:17.650 回答