Mysql ode>LEFT连接到其他表。使用此链接,我返回:(1,Ford,32)和(1,peugeot,32)。所以我错过了第2周t/m 56的数值。哦,对不起。尝试将“WHERE calendar.datefield介于'2012-01-01'和'2012-02

Mysql ode>LEFT连接到其他表。使用此链接,我返回:(1,Ford,32)和(1,peugeot,32)。所以我错过了第2周t/m 56的数值。哦,对不起。尝试将“WHERE calendar.datefield介于'2012-01-01'和'2012-02,mysql,sql,Mysql,Sql,ode>LEFT连接到其他表。使用此链接,我返回:(1,Ford,32)和(1,peugeot,32)。所以我错过了第2周t/m 56的数值。哦,对不起。尝试将“WHERE calendar.datefield介于'2012-01-01'和'2012-02-01'之间”替换为“WHERE carsales.sell_time介于'2012-01-01'和'2012-02-01'之间”。是的,这将修复金额,但不会修复丢失的周数。使用此选项,我可以返回:(1,福特,32)和(1,标致,32)。所以我


ode>LEFT连接到其他表。使用此链接,我返回:(1,Ford,32)和(1,peugeot,32)。所以我错过了第2周t/m 56的数值。哦,对不起。尝试将“WHERE calendar.datefield介于'2012-01-01'和'2012-02-01'之间”替换为“WHERE carsales.sell_time介于'2012-01-01'和'2012-02-01'之间”。是的,这将修复金额,但不会修复丢失的周数。使用此选项,我可以返回:(1,福特,32)和(1,标致,32)。所以我错过了第2周t/m 56的数值。哦,对不起。尝试将“WHERE calendar.datefield介于'2012-01-01'和'2012-02-01'之间”替换为“WHERE carsales.sell_time介于'2012-01-01'和'2012-02-01'之间”。是的,这将修复金额,但不会修复缺失的周数。是否知道我如何在SQL语句中执行此操作?括号等?知道我如何在SQL语句中这样做吗?括号等等?谢谢,这就成功了。一个次要的注意事项是,如果日期范围超过一年,那么周数就搞乱了。我还将添加“年份”列来修复此问题。谢谢,这成功了。一个次要的注意事项是,如果日期范围超过一年,那么周数就搞乱了。我还将添加year列来解决这个问题。
calendar:  //filled with dates from 2011-01-01 to 2015-12-31
+-----------+
| datefield |
+-----------+
| 2012-1-1  |
| 2012-1-2  |
| ...       |
| 2012-2-3  |
| 2012-2-4  |
+-----------+

car: 
+--------+---------+
| car_id |  name   |
+--------+---------+
|      1 | Ford    |
|      2 | Peugeot |
|      3 | Fiat    |
+--------+---------+

carsales: 
+-------------+-----------+--------+-------------+
| car_sale_id | sell_time | car_id | customer_id |
+-------------+-----------+--------+-------------+
|           1 | 2012-1-2  |      1 |           1 |
|           1 | 2012-1-2  |      2 |           1 |
|           2 | 2012-1-3  |      3 |           2 |
+-------------+-----------+--------+-------------+

customer: 
+-------------+---------+
| customer_id | country |
+-------------+---------+
|           1 | NL      |
|           2 | EN      |
+-------------+---------+
+----------+----------+-------+
|   Week   | Car name | Sales |
+----------+----------+-------+
| 1        | Ford     |     0 |
| 1        | Peugeot  |     0 |
| 1        | Fiat     |     0 |
| 2        | Ford     |     1 |
| 2        | Peugeot  |     1 |
| 2        | Fiat     |     0 |
| 3        | Ford     |     0 |
| 3        | Peugeot  |     0 |
| 3        | Fiat     |     0 |
| etc      | ...      |   ... |
+----------+----------+-------+
SELECT WEEKOFYEAR(calendar.datefield) as 'Week', car.name, COUNT(carsales.car_id)
FROM car, customer, calendar
LEFT JOIN carsales ON DATE(calendar.datefield) = DATE(carsales.sell_time)
WHERE calendar.datefield > '2012-01-01' AND calendar.datefield < '2012-02-01'
AND car.id = carsales.car_id
AND customer.country = 'NL'
AND customer.customer_id = carsales.customer_id
GROUP BY 'Week', car.name
ORDER BY 'Week', car.name;
SELECT WEEKOFYEAR(carsales.sell_time) as 'Week', car.name, COUNT(carsales.car_sale_id) 
FROM carsales 
LEFT JOIN car ON car.id=carsales.car_id 
LEFT JOIN customer ON customer.customer_id=carsales.customer_id 
WHERE carsales.sell_time BETWEEN '2012-01-01' AND '2012-02-01' 
AND customer.country = 'NL' 
GROUP BY 'Week', car.name 
ORDER BY 'Week', car.name;
SELECT 
      AllWeeksAllCars.WeekNumber,
      AllWeeksAllCars.Name,
      SUM( IF( Customer.Customer_ID > 0, 1, 0 ) ) as CarSales
   FROM 
      ( select AllWeeks.*,
               Car.car_id,
               Car.Name
           from 
              ( select 
                      WEEKOFYEAR( Calendar.DateField ) as WeekNumber,
                      MIN( Calendar.DateField ) as FirstDate,
                      MAX( Calendar.DateField ) as LastDate
                   from
                      Calendar
                   where
                          Calendar.dateField > '2012-01-01'
                      AND Calendar.dateField < '2012-01-01' 
                   group by
                      `WeekNumber` ) AllWeeks,
              car
           order by
              AllWeeks.WeekNumber,
              Car.Name  ) AllWeeksAllCars

         LEFT JOIN CarSales
            on CarSales.Sell_Time between AllWeeksAllCars.FirstDate and  AllWeeksAllCars.LastDate
           AND CarSales.Car_ID =  AllWeeksAllCars.Car_ID

             LEFT JOIN Customer
                on CarSales.Customer_ID = Customer.Customer_ID
                AND Customer.Country = 'NL'
   GROUP BY
      AllWeeksAllCars.WeekNumber,
      AllWeeksAllCars.Name