【发布时间】:2014-04-08 15:44:14
【问题描述】:
我正在整理一个 Oracle SQL 语句,该语句可以执行我需要的一些高级排序。到目前为止,这是我的声明:
SELECT TIME, PLACE
FROM TABLENAME
ORDER BY MIN(year) OVER (PARTITION BY PLACE), PLACE, TIME;
在获得其他问题 (Oracle SQL Grouping/Ordering) 的帮助后,我将其放在一起。现在我需要将季节加入其中,但是,它们在现有数据库中没有数字编号。
假设我有以下数据
TIME | PLACE
198410 | somewhere
198320 | work
198431 | somewhere
198232 | home
198322 | work
198211 | home
198422 | somewhere
TIME 列的前四位数字是年份,下一个数字是季节(其中 2 = 夏季,3 = 秋季,1 = 冬季),最后一个数字应忽略(出于比较原因)。
上述查询将产生以下结果(将地点组合在一起并根据时间(数字)对它们进行排序):
TIME | PLACE
198410 | somewhere
198422 | somewhere
198431 | somewhere
198320 | work
198322 | work
198211 | home
198232 | home
但是,我需要一个将奇怪编码的季节(夏季 = 2、秋季 = 3、冬季 = 1)考虑在内并产生以下按时间顺序排序的结果的查询:
TIME | PLACE
198422 | somewhere
198431 | somewhere
198410 | somewhere
198320 | work
198322 | work
198232 | home
198211 | home
我没有制定这个标准,但不幸的是我必须遵守它。非常感谢任何有关解决此问题的帮助。
【问题讨论】:
标签: sql oracle sorting sql-order-by aggregate-functions