You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询带关联乘数的最新指定类型推送记录SQL实现需求

嘿,我来帮你搞定这个SQL查询需求,一步步来,保证好懂~

核心思路拆解

首先咱们明确几个关键点:

  • 要只保留有对应乘数的推送记录:用INNER JOIN就能自动过滤掉没有关联multipliers的pushes记录,因为只有两边都匹配的行才会被留下来。
  • 要最新的推送记录:假设你的pushes表有类似created_at(创建时间)或者update_time(更新时间)的字段,我们用这个字段倒序排序,就能把最新的记录放最前面。
  • 要支持类型约束:加个WHERE条件过滤pushes的类型字段就行。
基础版SQL(取最新1条关联乘数的推送+对应乘数)

假设pushes表的主键是id,时间字段是created_at,直接用下面的语句:

SELECT p.*, m.*
FROM pushes p
INNER JOIN multipliers m ON p.id = m.push_id
-- 如果要加类型约束,就把下面这行注释去掉,替换成你的类型值
-- WHERE p.type = '你的目标类型'
ORDER BY p.created_at DESC
LIMIT 1;

各部分解释:

  • INNER JOIN multipliers m ON p.id = m.push_id:关联两张表,自动筛掉没有乘数的推送。
  • ORDER BY p.created_at DESC:按推送的创建时间从新到旧排序。
  • LIMIT 1:只取最上面的1条,也就是最新的那条。如果需要取最新的5条,改成LIMIT 5就行。
进阶版:如果一个推送对应多个乘数,取该推送的最新乘数

要是你的multipliers表一个推送有多条记录,想同时拿到最新推送的最新乘数,可以用CTE(公共表达式)来分步查询,逻辑更清晰:

-- 第一步:找到符合条件的最新推送记录
WITH latest_target_push AS (
    SELECT p.*
    FROM pushes p
    INNER JOIN multipliers m ON p.id = m.push_id
    WHERE p.type = '你的目标类型' -- 这里加类型约束,不需要就删掉
    ORDER BY p.created_at DESC
    LIMIT 1
),
-- 第二步:找到这条推送对应的最新乘数
latest_multiplier AS (
    SELECT m.*
    FROM multipliers m
    WHERE m.push_id = (SELECT id FROM latest_target_push)
    ORDER BY m.created_at DESC -- 假设乘数表也有时间字段,取最新的
    LIMIT 1
)
-- 最后把两张临时表关联起来,拿到完整数据
SELECT ltp.*, lm.*
FROM latest_target_push ltp
JOIN latest_multiplier lm ON ltp.id = lm.push_id;

注意事项:

  • 把语句里的created_at替换成你实际用的时间字段(比如update_time)。
  • p.type = '你的目标类型'里的类型值要和你pushes表中实际的类型取值一致(比如'system'、'user_notice'之类的)。

内容的提问来源于stack exchange,提问作者Riptyde4

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:23:03