2010-07-12 8 views
0

J'essaie de tronquer les dates pour obtenir uniquement l'année/mois par opposition à la forme dans laquelle ils sont dans quelle année/mois/jour.temps
Ce que je veux faire est de compter tous les voitures qui ont vendu chaque mois et tous les véhicules utilitaires sport qui ont vendu chaque mois, ayant quelque chose comme:sql combinant deux requêtes et la date de troncature

// counts cars  
select SellDate, count(*) 
from category 
where machineIdentification = 1 
GROUP BY SellDate 

// counts suv's 
select SellDate, count(*) 
from category 
where machineIdentification = 2 
GROUP BY SellDate 

séparément l'exécution de chaque requête me donne une liste de dates (y/m/d/heure à la seconde) et le nombre 1 parce que seulement 1 voiture ou suv a vendu l'heure exacte, cependant j'essaye de grouper par SellDate et tronque la date ainsi elle m'indique seulement les nombres totaux chaque mois.

ce que je suis en train de faire est de combiner les requêtes et finissent avec des valeurs comme ceci:

2009-01 23 10 
2009-02 13 14 
2009-03 29 7 

Avec la première colonne étant le année.mois.jour, le second étant Nombre de voitures vendues et le troisième Nombre de VUS vendu

+0

Qu'est-ce que SGBDR utilisez-vous? Quel est le type de données que vous utilisez? –

+0

J'utilise SQL Lite et les dates sont stockées en tant que chaînes – anon

+0

J'ai une chaîne pour la date entière comme ceci '2009-03-04T-02: 23: 41.254' – anon

Répondre

2
select 
    date(SellDate, 'start of month'), 
    SUM (CASE machineIdentification = 1 THEN 1 ELSE 0 END) AS carcount , 
    SUM (CASE machineIdentification = 2 THEN 1 ELSE 0 END) AS suvcount 
from category 
where machineIdentification IN (1, 2) 
GROUP BY date(SellDate, 'start of month') 

Je concaténer l'année/mois dans le code client de sorte que vous pouvez avoir « Juillet 2010 » par exemple

(je ne peux pas tester en SqlLite, désolé, mais devrait être proche, sauf pour l'année de sortie/format mois)

1

Il pourrait impliquer un syndicat dans une sous-requête et un format à la date, reformaté pour SqlLite:

SELECT SellDate, COUNT(CARS) AS Cars, COUNT(SUVS) AS SUVS 
FROM   
(SELECT STRFTIME('%Y-%m',SellDate) AS SellDate, 
     MachineIdentification AS CARS, null AS SUVS 
    FROM   Category 
    where machineIdentification = 1 
    UNION 
    SELECT STRFTIME('%Y-%m',SellDate) AS SellDate, 
     null AS CARS, MachineIdentification AS SUVS 
    FROM Category 
    where machineIdentification = 2 
) 
GROUP BY SellDate