【问题标题】:how to create a stored procedure that takes the start and end dates of the sales between the start and the end dates in MYSQL如何在MYSQL中创建一个存储过程,该过程在开始日期和结束日期之间获取销售的开始日期和结束日期
【发布时间】:2020-12-02 05:01:55
【问题描述】:

这是我第一次使用它,如有任何困惑,请见谅。

我正在尝试创建一个存储过程,它获取销售的开始日期和结束日期,并在 MYSQL 中显示开始日期和结束日期之间的所有销售交易。

所以我有两张桌子:

  1. 包含订单日期(order_date)的订单
  2. 每个订单的所有交易的交易 均由 order_ID 链接

这是我的代码

DELIMITER //

 CREATE PROCEDURE gettransactions(IN `start date` date , `end date` date)

BEGIN
 
SELECT * FROM  transactions t

join orders o on t.order_id = o.order_id

WHERE (o.order_date BETWEEN (SELECT MIN(DATE(o.order_date)) FROM orders) AND (SELECT MAX(DATE(o.order_date)) FROM orders));

  
END //

代码运行良好,我得到它来插入表格(抱歉,我不知道为什么我无法直接在此处添加屏幕截图): https://i.ibb.co/fMdPF48/sql.png

我的问题是,无论我插入什么日期,结果总是我在表中的所有交易。所以假设我想要从 4 月 7 日到 6 月 25 日的所有交易,我应该使用:

call chicgirls.gettransactions('2020-04-07', '2020-06-25');

结果应该是这个范围内的订单的交易,为什么我得到了所有的交易?无论我在哪个日期,它都会发生。

谢谢

【问题讨论】:

标签: mysql mysql-workbench


【解决方案1】:

您需要在查询中使用参数。您选择了所有订单,因为您选择的是同一张表中最小和最大日期之间的所有内容。

SELECT *
FROM transactions AS t
JOIN orders AS o ON t.order_id = o.order_id
WHERE o.order_date BETWEEN `start date` AND `end date`;

【讨论】:

  • 如此简单,而且非常精确。我坚持这一点是因为我认为子句“X 在 Y 和 Z 之间的位置”Y 和 Z 必须是一个值或列/字段名。非常感谢!
  • 变量可以在任何可以使用值的地方使用。
  • 如果它解决了问题,您应该接受答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 2012-08-19
相关资源
最近更新 更多