我有一些关于代理在不同时间对不同选项投票的数据:
+------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+----------------+
| ID | int(10) | NO | PRI | NULL | auto_increment |
| option | varchar(50) | NO | | NULL | |
| agent | varchar(50) | NO | | NULL | |
| date | datetime | NO | | NULL | |
+------------+-------------+------+-----+---------+----------------+
现在我想输出至少一个代理为最多 0个选项中的一个投票至少在t日期的所有行。
所以,假设,例如, = 2, t = 3, = 1。然后我只输出那些总和为(count)>= 3*2的行,并且在至少3个不同的日期中对2个不同代理的最多1个选项中的一个进行了投票。例如:
我正在寻找的选择命令应该输出:
+--------+-------+------+
| option | agent | date |
+--------+-------+------+
| opt1 | a | 1 |
| opt1 | a | 2 |
| opt1 | a | 3 |
| opt2 | b | 1 |
| opt2 | b | 2 |
| opt2 | b | 3 |
| opt1 | c | 1 |
| opt1 | c | 2 |
| opt1 | c | 3 |
+--------+-------+------+
仅代理a和c行:
+--------+-------+------+
| opt1 | a | 1 |
| opt1 | a | 2 |
| opt1 | a | 3 |
| opt2 | b | 1 |
| opt1 | c | 1 |
| opt1 | c | 2 |
| opt1 | c | 3 |
+--------+-------+------+
是否有办法这样做,或者我必须通过一组组合通过脚本(PHP)运行?非常感谢,Christian
认为您将需要几个子查询。首先获取至少具有所需数量的日期的所有选项/代理,然后将其用作另一个查询的源,以查找至少具有所需数量的代理的选项数量。然后将结果返回到您的表中,以获得这些选项的详细信息。
SELECT sometable.`option`, sometable.agent, sometable.date
FROM
(
SELECT `option`, COUNT(DISTINCT agent) as distinct_agents
FROM
(
SELECT `option`, agent, COUNT(DISTINCT date) AS distinct_dates
FROM sometable
GROUP BY `option`, agent
HAVING distinct_dates >= 3
) sub0
GROUP BY `option`
HAVING distinct_agents >=2
) sub1
INNER JOIN sometable
ON sub1.`option` = sometable.`option`
SQL fiddle for it:-
http://www.sqlfiddle.com/!2/2e357/2