对多列进行排序

时间:2015-08-14 11:35:29

标签: sql sorting

在加载时,我按照“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条记录是错误的。

1 个答案:

答案 0 :(得分:2)

您是否有理由使用所有这些嵌套的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运算符

的值即可对输出进行分页