2016-07-06 48 views
0

我有talbe库存汽车SQL:哪里有变量?

表车内分贝,租赁:

car_id | store_id 
------------------------- 
    1  |  1 
    2  |  1 
    3  |  2 
    [..] |  [..] 

where store_id can only be 1 or 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或Return 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 

我所建造的“汽车返回”,并首先在分离表“车租”,并都显示正确的资源ULT。 在只有一个选择,我有以下问题:

  WHERE h.return = 2009.11.23 

will make the "cars rented" always be 0 since
h.return > 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

为什么你有日期设置这样呢? – Drew

+0

他们给出,所以我不能改变:( –

+0

喜欢字符串?,, – Drew

回答

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

+0

为什么你在几个地方有'%x'? – Drew

+0

@Drew谢谢你指出这一点。我的意思是'@ x' ...哎呀 – imtheman

+0

@imtheman我已经做了你说,但得到**“接近”SET“:语法错误:”**我也试图把'@X“return_date”',但我得到**错误准备语句时:无法绑定参数@ X ** –