2011-01-04 7 views
3

Je veux sélectionner une date de table oracle formatée comme sélectionner (to_char(req_date,'MM/YYYY')) mais je veux aussi commander le jeu de résultats sur ce format de date.Oracle date/ordre par question

Je veux qu'ils soient commandés comme des dates et non des chaînes.

Vous aimez cette

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 

Pas comme

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 

Toute façon de le faire dans sql?

SQL complète est:

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') 

Merci

Répondre

1

Essayez cette

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

Cela fonctionne très bien. Bravo – BourneAgain

0

Il suffit d'utiliser order by req_date au lieu de order by to_char(req_date,'MM/YYYY').

+0

Désolé. Je fais aussi un groupe par full sql is -select (to_char (date_de_demande, 'MM/AAAA')) comme monthYear du groupe REQUISITION_CURRENT par to_char (req_date, 'MM/YYYY') order par monthYear Donc je ne peux pas commander par req_date . – BourneAgain

1

S'il vous plaît essayer

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

Vous êtes libre d'ajouter des champs de tri supplémentaires, même si elles sont le même domaine.

+2

+1, mais pourquoi vous ajoutez req_date dans votre sélection? –

+0

@Seed, penseur user561793 aimerait les voir ensemble, pour comprendre la question. Vous avez raison, cependant, req_date n'est pas nécessaire sur la clause select. – rajah9

0

Essayez

SELECT ... 
ORDER BY MIN(req_date) 

qui va contourner les règles d'Oracle sur ce qui peut être sélectionné après un GROUP BY.

3

Essayez ceci. Ça marche et c'est efficace, mais ça a l'air un peu compliqué.

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

Cela fonctionne beaucoup mieux, et n'a pas autant de frais généraux que la réponse sélectionnée. –

0

Je suis considérablement en retard à la fête, mais la façon la plus intuitive que j'ai trouvé pour y parvenir est la suivante:

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') 

Il est peut ne pas la méthode la plus efficace informatiquement car il convertit le date à un personnage et puis revenir à une date, mais c'est précisément ce que vous demandez une requête comme celle-ci à faire. Cela vous évite également d'ajouter des colonnes de support ou des sous-requêtes d'imbrication.