gpt4 book ai didi

mysql - SQL : WHERE with variable?

转载 作者:行者123 更新时间:2023-11-29 20:48:39 28 4
gpt4 key购买 nike

我有一个数据库,其中包含塔尔贝库存、汽车租赁

table 车:

    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_date”
3. 2009年11月23日还车数量
4. 2009.11.23 租车数量

凡在 2009.11.23 租车的,如果:
租金 <= 2009.11.23 AND(return > 2009.11.23 OR return 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

我首先在单独的表上构建了“归还的汽车”和“租用的汽车”,并且都显示了正确的结果。仅在一个 SELECT 中我遇到以下问题:
1.

         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

最佳答案

是的,你会这样做:

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

关于mysql - SQL : WHERE with variable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38234504/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com