【问题标题】:Select every 'nth row in descending order按降序选择每第 n 行
【发布时间】:2017-05-02 18:34:55
【问题描述】:
SELECT * FROM ( SELECT @row := @row +1 AS rownum, [column name] FROM ( SELECT * FROM [table name] ) WHERE rownum % 5 = 1

这确实每 5 行返回一次,但按升序排列。我想要的是它首先获取所有数据,将它们按降序排列,然后应用过滤器。

如果先过滤后降序排列,则不会以最新添加的数据开始(4/5的时间)。

我想知道应该怎么做。

提前致谢

编辑:对于有同样问题的人,这是我使用的:

SELECT * FROM
(SELECT rank, id, Temperature FROM 
(SELECT *, @rownum := @rownum + 1 AS rank FROM temperature_room1, 
(SELECT @rownum := 0) r) AS T ORDER BY id DESC) AS J WHERE rank % 5 = 1
  1. 从以下位置选择所有内容:
  2. 从以下位置选择等级、id 和温度:
  3. 从表中选择所有内容和行号作为排名,按 ID 降序排列
  4. 最后只输出能被5整除余1的行号

不要引用我的话,我是一个关于 SQL 东西的大菜鸟。它对我有用,所以我很高兴。

【问题讨论】:

  • 从什么降序排列?姓名?只需将 order by 添加到第二个选择查询(不是最里面的,因为那里不需要)

标签: mysql sql-order-by


【解决方案1】:

似乎您只需要在三个查询之一中的所需列上按 dec 排序。我认为第二个作为 order by 适用于同一级别的选择。 ans 既然你想要你的 rownum 有序的 desc ......似乎就是这个地方......

SELECT * 
FROM ( SELECT @row := @row +1 AS rownum, [column name] 
       FROM ( SELECT * FROM [table name] )
       ORDER BY [column name] desc
     )

WHERE rownum % 5 = 1

【讨论】:

  • 谢谢!它不太奏效,但经过一些调整,我想通了。它可能可以简化,但现在可以使用。
猜你喜欢
  • 2022-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-09
  • 2011-11-23
相关资源
最近更新 更多