按日期时间和提取子字符串排序



我有一个类似的表:

|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

相关内容

  • 没有找到相关文章

最新更新