2011-01-04 18 views
3

(to_char(req_date,'MM/YYYY'))のようにフォーマットされたOracleテーブルから日付を選択したいが、この日付形式で結果セットを注文したい。オラクルの日付/ご質問

文字列ではなく日付のように並べる必要があります。この

09/2009 
10/2009 
11/2009 
12/2009 
01/2010 
02/2010 
03/2010 
04/2010 
05/2010 
06/2010 
07/2010 
08/2010 
09/2010 
10/2010 
11/2010 
12/2010 

同様

01/2010 
02/2010 
03/2010 
04/2010 
05/2010 
06/2010 
07/2010 
08/2010 
09/2009 
09/2010 
10/2009 
10/2010 
11/2009 
11/2010 
12/2009 
12/2010 

SQLでこれを行うにはどのような方法が好きではありませんか?

全SQLは次のとおりです。

SELECT (to_char(req_date,'MM/YYYY')) as monthYear, count(req_id) as count 
FROM REQUISITION_CURRENT t 
GROUP BY to_char(req_date,'MM/YYYY') 

おかげ

答えて

1

は、GROUP BYの後に選択することができるかについて、Oracleのルールを回避ます

SELECT ... 
ORDER BY MIN(req_date) 

を試してみてください。この

select monthyear,yr,month,count(req_id) 
from 
(
SELECT (to_char(req_date,'MM/YYYY')) as monthYear, to_char(req_date,'YYYY') yr, to_char(req_date,'mm') month, req_id 
FROM REQUISITION_CURRENT t 
) x 
GROUP BY monthyear,yr,month 
order by yr, month 
+0

それは素晴らしい作品です。乾杯。 – BourneAgain

0

だけorder by req_dateの代わりorder by to_char(req_date,'MM/YYYY')を使用しています。

+0

申し訳ありません。私はまた、完全なSQLによってグループを行っている - tolect(to_char(req_date、 'MM/YYYY'))monthYear from REQUISITION_CURRENT t group to_char(req_date、 'MM/YYYY')order by monthYearだから私はreq_date 。 – BourneAgain

1

あなたは、彼らが同じフィールドであっても、追加のソートフィールドを追加するのは自由です

Select req_date, (to_char(req_date,'MM/YYYY')) from MY_TABLE order by req_date 

てみてください。

+2

+1、なぜあなたの選択にreq_dateを追加するのですか? –

+0

@Saeed、think561793は質問を理解するためにそれらを一緒に見たいと思っています。あなたは正しいですが、req_dateはselect節では必要ありません。 – rajah9

0

を試してみてください。

3

これを試してください。それはうまく動作しますが、少し面倒です。

select to_char(trunc(req_date, 'MM'),'MM/YYYY') as monthYear 
     ,count(req_id) as count 
    from requisition_current 
group 
    by trunc(req_date, 'MM') 
order 
    by trunc(req_date, 'MM'); 
+0

これははるかに優れており、選択した回答と同じオーバーヘッドはありません。 –

0

私はかなり遅れて相手にしていますが、私はこれを達成するために見つけた最も直感的な方法は以下の通りです:

SELECT DISTINCT 
    to_char(req_date,'MM/YYYY') as monthYear, 
    count(req_id) as count 
FROM 
    REQUISITION_CURRENT t 
GROUP BY 
    to_char(req_date,'MM/YYYY') 
ORDER BY 
    to_date(monthYear,'MM/YYYY') 

にですが、最も計算効率的な方法は、それが変換していない可能性があるため日付を文字に変換してから日付に戻すことができますが、これはまさにこのようなクエリを求めることです。また、サポート列の追加やサブクエリのネストもできません。