我有一个类似的表:
|datetime | request | result |
|2022-05-24 15:23:56 | request GET http://yahoo.com/api/asidasd | 200 |
|2022-05-24 16:20:01 | request POST http://google.com/api/125 | 401 |
|2022-05-23 10:00:02 | request POST http://google.com/api/255 | 500 |
|2022-05-23 10:00:00 | request POST http://google.com/api/255 | 200 |
|2022-05-23 09:59:00 | request POST http://google.com/api/255 | 200 |
|2022-05-23 01:23:56 | request GET http://yahoo.com/api/1516 | 200 |
|2022-05-23 01:22:50 | request GET http://yahoo.com/api/as45 | 200 |
这不是一个理想的表,但我仍然需要这样使用它。
我需要一个查询,过滤和组的数据表,通过API和状态结果,像这样:
|datetime | request | result | times |
|2022-05-24 | yahoo.com | 200 | 1 |
|2022-05-24 | google.com | 401 | 1 |
|2022-05-23 | google.com | 500 | 1 |
|2022-05-23 | google.com | 200 | 2 |
|2022-05-23 | yahoo.com | 200 | 2 |
Issue1:我不确定如何过滤日期时间数据,只考虑年-月-日并将它们分组
问题2:我不知道如何从"请求"中过滤数据列来获取请求链接,因为它是一个带有换行符的单元格(我必须获得第一行的最后一个单词,然后过滤到。com)
问题3:此错误:在聚合查询中不包含GROUP BY, SELECT列表的表达式#1包含非聚合列'response';当尝试执行select:
时,这与sql_mode=only_full_group_by不兼容。select request, count(result) from request_log where created_at >'2022-02-01' order by request
版本无关的查询将是
SELECT t.datetime, t.request, t.result, COUNT(*) AS times
FROM (
SELECT
DATE(datetime) AS datetime,
SUBSTRING_INDEX(SUBSTRING_INDEX(request, "//", -1), "/", 1) AS request,
result
FROM request_log
) t
GROUP BY t.datetime, t.request, t.result
ORDER BY request, datetime
小提琴https://www.db-fiddle.com/f/qFWjmcDF8nagojPQxTdg2H/0