我有一个带有talbe库存的数据库,汽车租赁
桌车:
car_id | store_id ------------------------- 1 | 1 2 | 1 3 | 2 [..] | [..]
其中store_id只能是1或2
表历史:
rental_id | return | rental | car_id ---------------------------------------------------- 1 | 2009.02.02 | 2009.01.12 | 5 2 | 2002.05.24 | 2009.05.01 | 8 3 | NULL | 2016.07.04 | 236 [..] | [..] | [..] | [..]
我必须回复:
1. store_id
2. return" return_date"
3. 2009年11月23日返回的汽车数量
4. 2009.11.23上租车的数量
如果出租车辆在2009.11.23上租用,则: 出租< = 2009.11.23 AND(返回> 2009.11.23或返回IS NULL)
考虑日期格式是固定的并且有效:D
这是我的代码:
SELECT store_id, h.return "return_date" , COUNT (h.return) "cars returned" SUM(CASE WHEN (h.rental < h.return AND (h.return > 2009.11.23 OR h.return IS NULL)) THEN 1 ELSE 0 END) "cars rented" FROM history h JOIN car i ON h.car_id = car.car_id WHERE h.return = 2009.11.23 GROUP BY car.store_id
我建造了&#34;汽车返回&#34;和&#34;汽车租用&#34;在分离的表上首先显示正确的结果。
只有一个SELECT我有以下问题:
1。
WHERE h.return = 2009.11.23
将使&#34;汽车租用&#34;从那以后总是0 h.return&gt; 2009.11.23
2
我想避免写作
h.return > 2009.11.23
是否可以声明一个变量x,所以我可以将它设置为2009.11.23并写一些像
SUM(CASE WHEN h.return = x THEN 1 ELSE 0 END) "cars returned" SUM(CASE WHEN (h.rental < h.return AND (h.return > x OR h.return IS NULL)) THEN 1 ELSE 0 END) "cars rented" [...] WHERE x = 2009.11.23
答案 0 :(得分:0)
是的,你会这样做:
SET @x = '2009.11.23';
SELECT store_id,
h.return "return_date" ,
COUNT (h.return) "cars returned"
SUM(CASE WHEN (h.rental < h.return
AND (h.return > @x OR h.return IS NULL)) THEN 1 ELSE 0 END) "cars rented"
FROM history h JOIN car i ON h.car_id = car.car_id
WHERE h.return = @x
GROUP BY car.store_id;
参考: http://dev.mysql.com/doc/refman/5.7/en/user-variables.html