SQL объединяет два запроса и усечение даты - PullRequest
0 голосов
/ 13 июля 2010

Я пытаюсь урезать даты, чтобы получить только год / месяц, а не форму, в которой они находятся: год / месяц / день. Время
Что я хочу сделать, так это подсчитать все машины, которые продавались каждый месяци все внедорожники, которые продаются каждый месяц, имеющие что-то вроде:

// 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  

. Отдельно выполняемый каждый запрос дает мне список дат (г / м / д / время до второго) и число 1, потому чтотолько 1 автомобиль или внедорожник продали это точное время, однако я пытаюсь сгруппировать по SellDate и урезать дату, чтобы она показывала мне только общее количество за месяц.

я пытаюсь объединить запросы ив итоге получим такие значения:

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

Первый столбец - year.month, второй - количество проданных автомобилей, а третий - количество проданных внедорожников

Ответы [ 2 ]

2 голосов
/ 13 июля 2010
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')

Я бы связал год / месяц в коде клиента, чтобы вы могли иметь "Июль 2010", например

(я не могу проверить в SQLLite, извините, но это должно быть близко, за исключением формата выходного года / месяца)

1 голос
/ 13 июля 2010

Может включать объединение в подзапросе и формат даты, переформатированный для 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
...