我有表log,因为我有一个列Message,它存储日志信息。Message将包含一些事件ID和日志描述,因此我希望读取所有具有不同事件ID的不同消息。
我试过的
select distinct message from log limit 100;我得到了所有不同的消息,但是具有相同的事件ID
下一首
select * from log where
message not like "%1177%" and
message not like "%609%" and
message not like "%82%" and
message not like "%1107%" and
message not like "%23%"
order by ID DESC limit 10;在这里,在获得日志之后,我必须再次添加一行,用于获取下一个唯一的事件id,比如,如果我得到了23,并且希望得到其他的23,我必须添加message not like "%23%"才能得到23以外的消息,并且这个查询的大小会越来越大。
那么,如何编写一个查询来选择具有不同事件ID的不同消息呢?
编辑
Field | Type | Null | Key | Default | Extra |
+--------------------+------------------+------+-----+---------+----------------+
| ID | int(10) unsigned | NO | PRI | NULL | auto_increment |
| FromHost | varchar(60) | YES | | NULL | |
| Message | text | YES | | NULL | |
**edit**示例消息
1177|Malformed DNS Packet|12-2-15
1177|Malformed DNS Packet|11-2-15
1177|Malformed DNS Packet|11-1-15
609|IDP Prevention Alert|12-2-15609名境内流离失所者预防警报11-1-15
输出
1177|Malformed DNS Packet|12-2-15
609|IDP Prevention Alert|11-1-15发布于 2015-02-13 05:28:30
select * from log where group by message,eventID此查询将根据唯一消息以及事件on返回日志。
发布于 2015-02-13 13:31:38
在Standard中,这将是:
SELECT
SUBSTRING(message FROM 1 FOR POSITION('|' IN message) -1) AS EventID
,MAX(message)
FROM tab
GROUP BY
SUBSTRING(message FROM 1 FOR POSITION('|' IN message) -1)如果不需要在结果中显示EventId,则可以简单地删除它。
在MySQL SUBSTRING/POISITION中,可以用SUBSTRING_INDEX代替(而且您可能也不需要MAX ):
SUBSTRING_INDEX(message, '|', 1)发布于 2015-02-13 05:41:41
SELECT DISTINCT id, message
FROM "yourTable" GROUP BY id这应该与消息一起返回id。
https://stackoverflow.com/questions/28493007
复制相似问题