SQL:带变量的WHERE?

时间:2016-07-06 22:00:57

标签: mysql

我有一个带有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

1 个答案:

答案 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