mysql 按子查询排序_Mysql:从子查询中按最大N值排序

我准备好了.

前言:我想用任何N做这个工作,但为了简单起见,我将N设置为3.

我有一个查询(特别是MySQL)需要从表中提取数据并根据该表中的前3个值进行排序,然后再回退到其他排序条件.

所以基本上我有这样的东西:

SELECT tbl.id

FROM

tbl1 AS maintable

LEFT JOIN

tbl2 AS othertable

ON

maintable.id = othertable.id

ORDER BY

othertable.timestamp DESC,

maintable.timestamp DESC

这是所有基本的教科书内容.但问题是我需要第一个ORDER BY子句才能获得othertable.timestamp中的三个最大值,然后回溯到maintable.timestamp.

另外,执行LIMIT 3子查询以使其可以并且加入它是不行的,因为这需要处理应用于维护的任意数量的WHERE条件.

我几乎能够使用基于用户变量的方法使其工作,但它失败了,因为它没有考虑到排序,所以它将获得它找到的第一个三个其他值的值:

ORDER BY

(

IF(othertable.timestamp IS NULL, 0,

IF(

(@rank:=@rank+1) > 3, null, othertable.timestamp

)

)

) DESC

(声明前面有@rank:= 0)

那么……有关于此的任何提示吗?我对这个问题感到失望.我对此的另一个参数是,因为我只是改变现有的(极其复杂的)查询,所以我无法执行包装外部查询.另外,如上所述,我使用的是MySQL,因此任何使用ROW_NUMBER函数的解决方案都是不可及的.

感谢所有提前.

编辑.这里有一些带有时间戳的示例数据,这些数据简化为更简单的整数,以说明我需要的内容:

maintable

id timestamp

1 100

2 200

3 300

4 400

5 500

6 600

othertable

id timestamp

4 250

5 350

3 550

1 700

=>

1

3

5

6

4

2

如果由于某种原因我们在查询中添加WHERE NOT maintable.id = 5,这是我们应该得到的:

1

3

4

6

2

…因为现在4是参考这个集合的前三个值之一.

所以如你所见,来自othertable的id为4的行不包含在排序中,因为它是时间戳值降序的第四行,因此它回退到按基本时间戳排序.

现实世界对此的需求是这样的:我有“维护”的内容,“othertable”基本上是特色内容的标记,时间戳为“特色日期”.我有一个视图,我应该将最后3个特色项目浮动到顶部,列表的其余部分只是一个反向的时间顺序列表.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值