我有简单的表格
|ID|TIME_HORIZON|
-----------------
|1 | 1W |
|2 | 1W |
|3 | 1M |
|4 | 6M |
|5 | 2Y |
|6 | 6M |
|7 | 2Y |
|8 | MAX |
如何从time_horizon中选择不同的值,但按ID排序?
答案 0 :(得分:2)
您可以将MIN
或MAX
与GROUP 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
;你可以直接在那里使用它。