【问题标题】:How to create procedure in mysql如何在mysql中创建程序
【发布时间】:2021-06-12 06:59:57
【问题描述】:

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

要求是这样的:

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

我的桌子是这样的:

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

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 ;

【问题讨论】:

标签: mysql sql stored-procedures procedure


【解决方案1】:

重建数据需要更多时间,例如编写 simole 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 |错误信息 | MAX(`错误日期`) | count_messages ----------: | :------- | :-------------------------------- | :---------------- | -------------: 9 | APP_2 |服务器错误 1 ​​| 2021-03-14 | 2 15 | APP_3 |服务器不可用 | 2021-03-14 | 2 1 | APP_1 |无法连接 - 101 | 2021-03-14 | 1 2 | APP_1 |无法连接 - 101 | 2021-03-01 | 1 4 | APP_1 |无法连接 - 102 | 2021-03-14 | 1 6 | APP_1 |无法连接 - 服务器错误 | 2021-03-14 | 1 11 | APP_2 |服务器错误 2 | 2021-03-14 | 1 13 | APP_2 |代理错误 | 2021-03-14 | 1

db小提琴here

【讨论】:

  • 谢谢@nbk。老实说,我找到了一种几乎与此相同的方法来解决这个问题 :) 非常感谢
猜你喜欢
  • 2012-04-22
  • 2014-12-22
  • 1970-01-01
  • 2014-10-06
  • 2012-03-02
  • 2012-03-23
  • 2017-10-20
  • 1970-01-01
相关资源
最近更新 更多