MySQL 存储过程 SELECT、三个 WHERE CLAUSE 值和 ORDER BY

标签 mysql sql stored-functions

我的存储函数似乎无法正常工作,我返回了 10 行 NULL 和 40 条警告。

我想编写一个存储函数,返回开始日期 D1 和结束日期 D2 之间 customer_id X 的最高支付金额。

表格结构如下:

sales(customer_id CHAR(1), date DATE, paid INT)

示例行:

sales(A, 2014-12-20, 3456)

我的存储函数:

DELIMITER $$
    CREATE FUNCTION highest_monthly_paid(x CHAR(1), D1 DATE, D2 DATE) 
      RETURNS INT
      DETERMINISTIC
    BEGIN
        DECLARE highest_fee INT;

        SELECT paid INTO highest_fee
        FROM sales
        WHERE customer_id = x 
        AND date > D1
        AND date < D2
        ORDER BY paid DESC LIMIT 1;
        RETURN highest_fee;
    END
    $$

这行不通还是我最好使用某种子查询?如果这两种方法都有效,我应该使用哪种?

我试过 MAX(paid) 而不是 LIMIT

我调用函数的查询:

SELECT highest_monthly_paid(A,  2013-12-10,  2013-12-25)
FROM sales;

数据库中有两行customer_id为A:

+-------------+-------+----------+------------+--------+
| customer_id | model | quantity | day        | paid   |
+-------------+-------+----------+------------+--------+
| A           | 2002  |        2 | 2013-12-19 |   1898 |
| A           | 3002  |        1 | 2013-12-18 |    239 |
+-------------+-------+----------+------------+--------+

我的结果:

mysql> SELECT highest_monthly_paid(A,  2013-12-10,  2013-12-25)
    -> FROM sales;
+------------------------------------------------------------+
| highest_monthly_paid(A,  2013-12-10,  2013-12-25) |
+------------------------------------------------------------+
|                                                       NULL |
|                                                       NULL |
|                                                       NULL |
|                                                       NULL |
|                                                       NULL |
|                                                       NULL |
|                                                       NULL |
|                                                       NULL |
|                                                       NULL |
|                                                       NULL |
+------------------------------------------------------------+
10 rows in set, 30 warnings (0.00 sec)

最佳答案

我认为以下查询应该足以获取每个客户在给定日期范围内的 highest_fee。如果您有其他要求,请告诉我们。

SELECT customer_id, MAX(paid) AS highest_fees
FROM sales
WHERE date BETWEEN '2013-12-10' AND '2013-12-25'
GROUP BY customer_id

关于MySQL 存储过程 SELECT、三个 WHERE CLAUSE 值和 ORDER BY,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23505341/

相关文章:

sql - Oracle SQL 查询计数组按时间戳子字符串

mysql - 不允许 NULL 参数到 MySQL/MariaDB 中的存储过程

sql-server - 使用 BEGIN/END 来组织 SQL 代码有什么坏处吗?

Java等待Mysql连接

mysql - AWS Ubuntu 14.04 上的无人值守 MySQL 安装

mysql - to_date 字符类型日期的替代方案

sql - 在两个日期之间取最小值时出错

javascript - Node/JavaScript 日期时间和 MySQL

sql - SQL 数据库是否有等效的 "Code Coverage"?

c++ - 将 Informix Object Interface for C++ 用于不带参数的存储过程/函数