获取过去24小时内匹配数据且含最大值的通知表记录
嘿,针对你要获取过去24小时内数据匹配且包含最大值记录的需求,我结合你的notifications表结构整理了几种实用的解决方案:
解决方案分场景说明
场景1:直接获取过去24小时内主键最大的单条记录
如果你的需求是拿到近24小时里notification_id(自增主键,天然代表插入顺序)最大的那条记录,这条SQL最直接:
SELECT * FROM notifications WHERE created_time >= NOW() - INTERVAL 24 HOUR ORDER BY notification_id DESC LIMIT 1;
逻辑很简单:先筛选出时间范围内的所有记录,按主键降序排序后取第一条,就是最大值对应的记录。
场景2:按维度分组,获取每组的最大值记录
比如你想按source(数据源)或者not_type(通知类型)分组,拿到每个分组在过去24小时内的最大值记录,可以用子查询关联的方式:
-- 按source分组的示例 SELECT n.* FROM notifications n JOIN ( -- 先找出每个source在近24小时内的最大notification_id SELECT source, MAX(notification_id) AS max_notification_id FROM notifications WHERE created_time >= NOW() - INTERVAL 24 HOUR GROUP BY source ) AS group_max ON n.source = group_max.source AND n.notification_id = group_max.max_notification_id WHERE n.created_time >= NOW() - INTERVAL 24 HOUR;
要是想按not_type分组,只需要把GROUP BY source改成GROUP BY not_type,关联条件也对应调整就行。
场景3:获取过去24小时内创建时间最新的记录
如果你的“最大值”指的是created_time(最新创建的通知),可以用这个写法:
SELECT * FROM notifications WHERE created_time >= NOW() - INTERVAL 24 HOUR AND created_time = ( SELECT MAX(created_time) FROM notifications WHERE created_time >= NOW() - INTERVAL 24 HOUR );
这个语句会返回所有在近24小时内创建时间等于最大时间的记录(如果有多个通知同一时间创建,都会被返回)。
自定义匹配条件的扩展
如果你的“数据匹配”是指特定筛选规则(比如只找not_type = 'system_alert'的通知),只需要在所有WHERE子句里添加对应的条件就行。比如场景1加上类型筛选:
SELECT * FROM notifications WHERE created_time >= NOW() - INTERVAL 24 HOUR AND not_type = 'system_alert' -- 这里替换成你的匹配条件 ORDER BY notification_id DESC LIMIT 1;
内容的提问来源于stack exchange,提问作者PremKumarS
相关产品推荐
相关产品推荐

