SQL顺序交替

时间:2016-11-15 08:29:16

标签: sql postgresql

有没有办法以交替方式订购sql(拼写最高和最低结果)

例如,逐年降序会导致类似:

2016
2015
2014
2013

按年升序排序会产生类似

的结果
1990
1991
1992
1993

我想要实现的目标是:

2016
1990
2015
1991

可能有一种手动方式来执行此操作(即排序和限制然后UNION两个结果集),但除此之外,SQL(在我的情况下是Postgres)是否原生支持这个?

2 个答案:

答案 0 :(得分:3)

假设您的表格table_name列名为year_column(如果您有查询,请将table_name更改为您的查询,同时更改为year_column

然后你可以用这个:

SELECT 
    ROW_NUMBER() OVER (ORDER BY year_column DESC) rnm_desc,
    ROW_NUMBER() OVER (ORDER BY year_column ASC) rnm_asc,
    t.*
FROM 
 table_name t   
ORDER BY 
    LEAST(rnm_desc, rnm_asc), 
    year_column DESC;

答案 1 :(得分:0)

select      *

from        t

order by    least (row_number () over (order by yr asc),row_number () over (order by yr desc))
           ,yr desc
;