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

MySQL查询:获取仅拥有一张已使用工单的用户及其工单日期

解决方案

你可以通过两种方式实现需求:

方法一:分组筛选+HAVING子句

先通过分组统计每个用户的工单数量,筛选出仅拥有1张工单的用户,再关联原表获取对应工单信息:

SELECT
  w.id,
  w.user_id,
  w.used_at
FROM
  washtickets w
JOIN (
  SELECT 
    user_id, 
    MIN(used_at) AS used_at
  FROM washtickets
  WHERE deleted_at IS NULL
  GROUP BY user_id
  HAVING COUNT(*) = 1 -- 筛选仅拥有1张工单的用户
) AS single_ticket_users
ON w.user_id = single_ticket_users.user_id 
AND w.used_at = single_ticket_users.used_at
WHERE w.deleted_at IS NULL
ORDER BY w.used_at ASC;

方法二:窗口函数(更简洁)

使用COUNT() OVER()窗口函数直接统计每个用户的工单总数,再筛选总数为1的记录:

SELECT id, user_id, used_at
FROM (
  SELECT 
    id,
    user_id,
    used_at,
    -- 统计当前用户的工单总数
    COUNT(*) OVER(PARTITION BY user_id) AS total_tickets
  FROM washtickets
  WHERE deleted_at IS NULL
) AS ticket_stats
WHERE total_tickets = 1
ORDER BY used_at ASC;

说明

  • 两种方法都保留了deleted_at IS NULL的条件,确保只统计未删除的工单
  • 方法一通过分组聚合筛选目标用户,再关联取工单详情;方法二用窗口函数一次性完成统计和筛选,逻辑更直观,多数数据库下性能表现更优

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 08:07:40