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

如何在Looker中获取DelayedJobs各队列的最旧任务?

解决DelayedJobs各队列最旧任务查询问题

问题根源

你之前的SQL存在两个核心问题:

  • GROUP BY ${queue} 后,SELECT 中的 ${id} 既不在分组字段里,也没有用聚合函数包裹,不符合SQL标准规范,这是报错的直接原因。
  • DISTINCT 仅能去除完全重复的行,无法实现“按队列筛选出创建时间最早的任务”的需求,自然会出现重复行或返回错误结果。

优化后的查询方案

使用窗口函数 ROW_NUMBER() 可以精准实现需求,这也是Looker支持的标准写法:

WITH ranked_jobs AS (
  SELECT 
    ${queue},
    ${id},
    ${created_time},
    -- 按队列分组,按创建时间升序排序,标记每个队列内的任务顺序
    ROW_NUMBER() OVER (PARTITION BY ${queue} ORDER BY ${created_time} ASC) AS row_rank
  FROM ${TABLE}
)
-- 筛选每个队列中排序第一的任务(即最旧任务)
SELECT ${queue}, ${id}, ${created_time}
FROM ranked_jobs
WHERE row_rank = 1

特殊场景处理

如果同一队列内存在多个创建时间完全相同的最旧任务,且需要返回所有这类任务,只需将 ROW_NUMBER() 替换为 RANK() 或 DENSE_RANK() 即可,这两个函数会给相同创建时间的任务标记相同的排名。

替代写法(无CTE版本)

如果你的数据库不支持CTE(公用表表达式),可以改用子查询形式:

SELECT ${queue}, ${id}, ${created_time}
FROM (
  SELECT 
    ${queue},
    ${id},
    ${created_time},
    ROW_NUMBER() OVER (PARTITION BY ${queue} ORDER BY ${created_time} ASC) AS row_rank
  FROM ${TABLE}
) job_ranks
WHERE row_rank = 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 00:43:15