如何在SQL中以正确的顺序显示最近12个月的数据

时间:2017-09-18 19:15:44

标签: sql oracle jdbc

我希望MM-YYYY记录最近12个月的记录。

select to_char((SCHEDULED_START_DT), 'MM-YYYY') , count(*)
    from XYZ where  SCHEDULED_START_DT > TRUNC (ADD_MONTHS (SYSDATE, -11), 'MM')
    group by to_char((SCHEDULED_START_DT), 'MM-YYYY') 

这是上述查询的输出。

enter image description here

但我希望输出符合以下顺序

10-2016
11-2016
12-2016
01-2017
02-2017
03-2017
04-2017
05-2017
06-2017
07-2017
08-2017
09-2017

这样做的最佳方式是什么?

3 个答案:

答案 0 :(得分:3)

一种简单的方法是按每个期间的任何一个日期排序。 min()max()可用于订购目的:

select to_char(SCHEDULED_START_DT, 'MM-YYYY'), count(*)
from XYZ
where SCHEDULED_START_DT > TRUNC(ADD_MONTHS(SYSDATE, -11), 'MM')
group by to_char(SCHEDULED_START_DT, 'MM-YYYY') 
order by min(SCHEDULED_START_DT);

答案 1 :(得分:0)

最简单的方法是按日期(而不是字符串)进行分组,然后按它排序:

select to_char(trunc(SCHEDULED_START_DT,'MM'), 'MM-YYYY') , count(*)
from XYZ where SCHEDULED_START_DT > TRUNC (ADD_MONTHS (SYSDATE, -11), 'MM')
group by trunc(SCHEDULED_START_DT,'MM')
order by trunc(SCHEDULED_START_DT,'MM')

答案 2 :(得分:-1)

选择to_char(SCHEDULED_START_DT,'MM-YYYY'),count(*) 来自XYZ 其中SCHEDULED_START_DT> TRUNC(ADD_MONTHS(SYSDATE,-11),'MM') 按to_char分组(SCHEDULED_START_DT,'MM-YYYY') 按SCHEDULED_START_DT DESC排序;

应该这样做!