如何解决获取最近3组的所有行
| 我在Google上搜索了一下,但没有找到任何对我有帮助的东西。 我有一个有效的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元素(每个元素的最大值,组元素的AVG等)而不是GROUPS自身(按字段排序的前三个组)执行操作。
预先感谢您的帮助!
编辑:这是我真正的查询。
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
解决方法
SELECT `table`.* FROM
(SELECT DISTINCT `group`
FROM `table`
ORDER BY `group` DESC LIMIT 3) t1
INNER JOIN `table` ON `table`.`group` = t1.`group`
子查询应返回三个具有最大值的组,“ 4”将确保不包括不包含这些组值的行。
假设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
请注意,根据您的表结构,这可能效率很低,但是如果没有更多信息,这是我能做的最好的事情。
,这样怎么样...(我用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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。