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