我用谷歌搜索了一下然后看了但是我找不到任何帮助我的东西。
我有一个工作的MySQL查询,它选择了一些列(有三个表,有两个JOIN语句),我希望在结果集上做一些额外的事情。
我想从3个最近的组中选择所有行。 (我只能假设我必须在该列上使用GROUP BY)我很难清楚地解释这一点,所以我将使用一个例子:
id | group
--------------
1 | 1
2 | 2
3 | 2
4 | 2
5 | 3
6 | 3
7 | 4
8 | 4
当然,为了简单起见,我把它愚蠢了(我当前的查询不包含id列)。
现在我理想的查询会按顺序返回(这是id字段):
8,7,6,5,4,3,2
如果我要添加以下第9个元素:
id | group
--------------
9 | 5
我理想的查询将按顺序返回:
9,8,7,6,5
因为这些是最近3组中的所有行。此外,当两行具有相同的组(并且仍然在结果集中)时,我想将它们排序为另一个字段(我没有包含在我愚蠢的示例中)。
在我的搜索中,我只发现了如何对GROUPS的元素(每个元素的MAX,组元素的AVG等)执行操作,而不是GROUPS本身(按字段排序的前3个组)。
提前感谢您的帮助!
编辑:这是我的真实查询的样子。
SELECT t1.f1, t1.f2, t2.f1, t2.f2, t2.f3, t3.f1, t3.f2, t3.f3, t3.f4
FROM t1
LEFT JOIN t2 ON t2.f1=t1.f3
LEFT JOIN t3 ON t2.f1=t3.f5
WHERE t1.f4='some_constant' AND t2.f4='some_other_constant'
ORDER BY t1.f2 DESC
答案 0 :(得分:0)
SELECT `table`.* FROM
(SELECT DISTINCT `group`
FROM `table`
ORDER BY `group` DESC LIMIT 3) t1
INNER JOIN `table` ON `table`.`group` = t1.`group`
子查询应该返回具有最大值的三个组,INNER JOIN
将确保不包含没有这些组值的行。
假设t1.f2是您的组列:
SELECT a,b,c,d,e,f,g,h,i
FROM
(
SELECT t1.f1 as a, t1.f2 as b, t2.f1 as c, t2.f2 as d, t2.f3 as e, t3.f1 as f, t3.f2 as g, t3.f3 as h, t3.f4 as i
FROM t1
LEFT JOIN t2 ON t2.f1=t1.f3
LEFT JOIN t3 ON t2.f1=t3.f5
WHERE t1.f4='some_constant' AND t2.f4='some_other_constant'
ORDER BY t1.f2 DESC
) first_table
INNER JOIN
(
SELECT DISTINCT `f2`
FROM `t1`
ORDER BY `f2` DESC LIMIT 3
) second_table
ON first_table.b = second_table.f2
请注意,根据您的表格结构,这可能效率非常低,但如果没有更多信息,我可以做到最好。
答案 1 :(得分:0)
这种方式怎么样...(我使用groupId而不是'group'
[QUERY] => something like (SELECT id, groupId from tables.....) (your query with 2 joins).
-- with this query you have the last thre groups.
[QUERY2] => SELECT distinct(groupId) as groupId FROM ([QUERY]) ORDER BY groupId DESC LIMIT 0,3
最后你将拥有:
SELECT id, groupId from tables----...... WHERE groupId in ([QUERY2]) order by groupId DESC, id DESC