【问题标题】:Sort multiple columns对多列进行排序
【发布时间】:2015-11-07 15:39:52
【问题描述】:

加载时,在按“Create_date desc”排序的 1000 条记录中,我只得到 20 条记录(页面的最大限制为 20 条记录)。现在我只想对这 1000 条记录进行排序,这些记录应该按 SCHEDULE_ID ASC/DESC 排序。

以下是查询:

select * 
  from ( 
    select * 
      from (
        select SCHEDULE_ID, 
               DEPARTMENT, 
               STATUS, 
               CREATE_DATE, 
               rownum ano
          from M_T_NEMO 
        where STATUS like 2 
          AND ROWNUM <= 1000 
        ORDER BY CREATE_DATE DESC
        ) 
      ORDER BY SCHEDULE_ID ASC
      ) 
    where ano >= 0 
      AND ano <= 20

每页只能有 20 条记录。这个查询正确吗? 现在它只对每页 20 条记录进行排序,这是错误的。

【问题讨论】:

  • 您使用的是哪种 dbms 产品?
  • 请描述您正在尝试做的事情并用您正在使用的数据库标记问题。

标签: sql sorting


【解决方案1】:

你有理由使用所有这些嵌套的SELECT 语句吗?

你真的可以像这样重写它

SELECT SCHEDULE_ID, 
  DEPARTMENT, 
  STATUS, 
  CREATE_DATE, 
  ROWNUM ano
FROM M_T_NEMO 
WHERE STATUS = 2 
  AND ROWNUM <= 20 
ORDER BY CREATE_DATE DESC, SCHEDULE_ID ASC

实际上这可能不适用于 Oracle,因为 ROWNUM 是在排序之前分配的

SELECT sub.*
  ROWNUM
FROM (
  SELECT SCHEDULE_ID, 
    DEPARTMENT, 
    STATUS, 
    CREATE_DATE
  FROM M_T_NEMO 
  WHERE STATUS = 2 
  ORDER BY CREATE_DATE DESC, SCHEDULE_ID ASC
  ) sub
WHERE ROWNUM BETWEEN 1 AND 20

这将允许您通过简单地增加 BETWEEN 运算符的值来分页输出

【讨论】:

    猜你喜欢
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多