如何在 mysql 中创建程序

How to create procedure in mysql

我正在 mysql 中创建一个过程,但我遇到了所需结果的问题,现在我一团糟。请帮助我!

要求是这样的:

从 table 中获取当天的前 20 个条目。对于前 20 个条目,它们应该是一天中出现频率最高的条目——如果可能的话。 - 如果发现的错误发生在过去 30 天内,请显示它在过去 30 天内出现的次数,以及错误首次出现的日期。例如 - 应用程序 1 在今天发生了一条错误消息“连接时出错”。但是,它在过去 30 天内也发生过此错误,发生次数超过 5 次。计数应显示为 6(当前出现和前 5 次出现)。错误首次出现的日期也应该显示出来。输出应如下所示 - 按列名称: - 应用程序名称 - 错误消息 - 计数 - 错误消息在过去 30 天内出现的次数,对于“应用程序名称”和“错误消息”的唯一键 - 日期 -此错误首次出现的日期,对于“应用程序名称”和“错误消息”的唯一键

我的 table 看起来像这样:

到目前为止,我已经创建了以下程序:

CREATE PROCEDURE ExpectedResult()
BEGIN
    SELECT log_id, app_name, error_message, error_date, count(error_message)
    FROM app_log WHERE error_date < '2021-03-14' -- CURDATE()
    group by app_name, error_message;
END$$
DELIMITER ;

重建数据需要更多时间,编写一个简单的sql查询

CREATE TABLE app_log (
  `LOG_ID` INTEGER,
  `APP_NAME` VARCHAR(5),
  `ERROR-MESSAGE` VARCHAR(34),
  `ERROR-DATE` VARCHAR(10)
);

INSERT INTO app_log
  (`LOG_ID`, `APP_NAME`, `ERROR-MESSAGE`, `ERROR-DATE`)
VALUES
  ('1', 'APP_1', 'UNABLE TO CONNECT -  101', '2021-03-14'),
  ('2', 'APP_1', 'UNABLE TO CONNECT - 101', '2021-03-01'),
  ('3', 'APP_1', 'UNABLE TO CONNECT - 101', '2021-01-01'),
  ('4', 'APP_1', 'UNABLE TO CONNECT - 102', '2021-03-14'),
  ('5', 'APP_1', 'UNABLE TO CONNECT - 102', '2021-01-01'),
  ('6', 'APP_1', 'UNABLE TO CONNECT - SERVER ERROR', '2021-03-14'),
  ('7', 'APP_1', 'UNABLE TOCONNECT -102', '2020-01-01'),
  ('8', 'APP_2', 'SERVER ERROR 1', '2021-03-14'),
  ('9', 'APP_2', 'SERVER ERROR 1', '2021-03-01'),
  ('10', 'APP_2', 'SERVER ERROR 1', '2021-01-01'),
  ('11', 'APP_2', 'SERVER ERROR 2', '2021-03-14'),
  ('12', 'APP_2', 'SERVER ERROR 2', '2020-01-01'),
  ('13', 'APP_2', 'PROXY ERROR', '2021-03-14'),
  ('14', 'APP_3', 'SERVER UNAVAILABLE', '2021-03-14'),
  ('15', 'APP_3', 'SERVER UNAVAILABLE', '2021-03-01'),
  ('16', 'APP_3', 'SERVER UNAVAILABLE', '2021-01-01');
    SELECT MAX(LOG_ID), APP_NAME, `ERROR-MESSAGE`, MAX(`ERROR-DATE`), count(`ERROR-MESSAGE`) count_messages
    FROM app_log WHERE `ERROR-DATE` >=   CURDATE()  - iNTERVAL 30 daY
    group by APP_NAME, `ERROR-MESSAGE`
    ORDEr BY  count_messages DESC
    LIMIT 20;
MAX(LOG_ID) | APP_NAME | ERROR-MESSAGE                    | MAX(`ERROR-DATE`) | count_messages
----------: | :------- | :------------------------------- | :---------------- | -------------:
          9 | APP_2    | SERVER ERROR 1                   | 2021-03-14        |              2
         15 | APP_3    | SERVER UNAVAILABLE               | 2021-03-14        |              2
          1 | APP_1    | UNABLE TO CONNECT -  101         | 2021-03-14        |              1
          2 | APP_1    | UNABLE TO CONNECT - 101          | 2021-03-01        |              1
          4 | APP_1    | UNABLE TO CONNECT - 102          | 2021-03-14        |              1
          6 | APP_1    | UNABLE TO CONNECT - SERVER ERROR | 2021-03-14        |              1
         11 | APP_2    | SERVER ERROR 2                   | 2021-03-14        |              1
         13 | APP_2    | PROXY ERROR                      | 2021-03-14        |              1

db<>fiddle here