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

如何编写多条件SQL查询以提取指定日期的员工出行模式数据

满足要求的SQL查询实现

可以编写符合所有条件的SQL查询,核心是验证同一员工在指定两个日期的出行模式是否完全匹配规则。以下是两种可行的实现方式:

方式一:自关联+存在性校验

假设你的表名为employee_travel,包含字段employee_id(员工ID)、travel_date(出行日期)、travel_mode(出行模式),查询语句如下:

SELECT t1.employee_id,
       t1.travel_date AS jan_31_date,
       t1.travel_mode AS jan_31_mode,
       t2.travel_date AS feb_28_date,
       t2.travel_mode AS feb_28_mode
FROM employee_travel t1
INNER JOIN employee_travel t2 
    ON t1.employee_id = t2.employee_id
WHERE t1.travel_date = '2023-01-31'
  AND t1.travel_mode = 'BUS'
  AND t2.travel_date = '2023-02-28'
  AND t2.travel_mode = 'CAR'
-- 确保2023-02-28该员工没有其他出行模式的记录
AND NOT EXISTS (
    SELECT 1
    FROM employee_travel t3
    WHERE t3.employee_id = t1.employee_id
      AND t3.travel_date = '2023-02-28'
      AND t3.travel_mode != 'CAR'
)

逻辑说明

  • 通过自关联获取同一员工在两个目标日期的记录,筛选出1月31日为BUS、2月28日为CAR的基础匹配项
  • NOT EXISTS子句用于排除那些在2月28日存在非CAR出行模式的员工,严格满足“仅为CAR”的要求
  • 最终返回符合所有规则的员工在两个日期的出行数据

方式二:分组聚合校验

如果需要按员工维度汇总结果,也可以使用分组聚合的方式:

SELECT employee_id,
       MAX(CASE WHEN travel_date = '2023-01-31' THEN travel_mode END) AS jan_31_mode,
       MAX(CASE WHEN travel_date = '2023-02-28' THEN travel_mode END) AS feb_28_mode
FROM employee_travel
WHERE travel_date IN ('2023-01-31', '2023-02-28')
GROUP BY employee_id
HAVING MAX(CASE WHEN travel_date = '2023-01-31' THEN travel_mode END) = 'BUS'
   AND MAX(CASE WHEN travel_date = '2023-02-28' THEN travel_mode END) = 'CAR'
   -- 确保2月28日仅存在CAR一种出行模式
   AND COUNT(DISTINCT CASE WHEN travel_date = '2023-02-28' THEN travel_mode END) = 1

逻辑说明

  • 先筛选出仅包含两个目标日期的数据,按员工分组
  • 通过HAVING子句中的聚合条件,验证1月31日模式为BUS、2月28日模式为CAR,同时确保2月28日该员工的出行模式唯一(即仅为CAR)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 14:42:52