按ID排序而不显示ID

时间:2018-04-20 15:55:37

标签: sql oracle

我有简单的表格

|ID|TIME_HORIZON|
-----------------
|1 | 1W         |
|2 | 1W         |
|3 | 1M         |
|4 | 6M         |
|5 | 2Y         |
|6 | 6M         |
|7 | 2Y         |
|8 | MAX        |

如何从time_horizo​​n中选择不同的值,但按ID排序?

2 个答案:

答案 0 :(得分:2)

您可以将MINMAXGROUP BY

一起使用
SELECT MIN(ID) AS ID
    ,TIME_HORIZON
FROM Table1
GROUP BY TIME_HORIZON
ORDER BY ID;

| ID | TIME_HORIZON |
|----|--------------|
|  1 |           1W |
|  3 |           1M |
|  4 |           6M |
|  5 |           2Y |
|  8 |          MAX |

如果您不想显示ID,则可以选择嵌套上述查询。

select TIME_HORIZON FROM 
(
 select MIN(ID) as ID,TIME_HORIZON FROM Table1 
   GROUP BY TIME_HORIZON
  ORDER BY ID
) --where clause filtering ;

编辑:如果您想根据TIME_HORIZON过滤基于ordered max(id)的{​​{1}},或者请参阅@ mathguy的答案,则需要使用括号

答案 1 :(得分:2)

即使您没有在ORDER BY条款中包含表达式,也可以SELECT表达。在您的问题中,由于相同的TIME_HORIZON可能不止一次出现,因此不清楚您的意思是"按ID"排序但如果你的意思是"按MIN(ID)"订购它,就像你标记为正确的解决方案一样,那可以非常简单地完成:

select   time_horizon
from     inputs
group by time_horizon
order by min(id)
;

您无需选择min(id)即可order by;你可以直接在那里使用它。