现在我知道这已经被问过好几次了,但是我已经尝试将不同的现有解决方案应用于我的特定问题很长一段时间没有成功。所以我转过来希望得到一些指导。
我有一个名为 tblanswers 的表,其中包含链接到另一个表中不同问题的答案。我想要的是获取特定问题 ID 的每个答案的计数,但将其限制为每个月的 n 个第一个答案。
来自 tblanswers 的样本数据:
id qid answer timestamp
72 162 2 1366027324
71 161 4 1343599200
70 162 2 1366014201
69 161 4 1366011700
68 162 2 1366006729
67 161 3 1366010948
66 162 2 1365951084
这是我到目前为止的查询:
SELECT *, COUNT(*) c FROM(
SELECT answer, timestamp, YEAR(FROM_UNIXTIME(timestamp)) yr, MONTH(FROM_UNIXTIME(timestamp)) mo FROM tblanswers
WHERE qid = 161
ORDER BY timestamp ASC
) q GROUP BY YEAR(FROM_UNIXTIME(timestamp)), MONTH(FROM_UNIXTIME(timestamp)), answer
那会给我这样的东西:(样本数据中的日期和数字不准确)
answer yr mo c
1 2013 5 5
2 2013 5 3
3 2013 5 2
1 2013 6 5
2 2013 6 15
3 2013 6 7
假设我只想看一个月内的前三个答案,那么 count 永远不会超过 3。我该如何限制每个月?
最终数据应该是每个答案的总和,如下所示:
answer num_answers
1 2
2 3
3 3
我认为这些解决方案之一可以工作,但不是如何: http: //code.openark.org/blog/mysql/sql-selecting-top-n-records-per-group http://code.openark.org/博客/mysql/sql-selecting-top-n-records-per-group-another-solution
任何帮助表示赞赏。谢谢!