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

如何查询时长不足1小时的戏剧并生成under_hour标记列

如何判断戏剧时长是否不足1小时并生成目标结果集?

我来给你一步步拆解实现方法,帮你得到需要的结果集:

核心思路

我们需要先从原始数据里提取每部戏剧的开始时间和结束时间,然后计算两者的时间差,最后根据差值是否小于1小时来标记under_hour的取值。

通用SQL实现方案

假设你的数据表名为play_schedule,包含Play_name、Status、Date这几列(注意Date是SQL关键字,建议用反引号/双引号包裹)。下面是具体的SQL代码:

SELECT 
    Play_name,
    CASE 
        -- 计算分钟差,小于60分钟则标记为Yes,否则NO
        WHEN TIMESTAMPDIFF(MINUTE, start_time, end_time) < 60 THEN 'Yes'
        ELSE 'NO'
    END AS under_hour
FROM (
    -- 子查询:提取每部戏剧的开始和结束时间
    SELECT 
        Play_name,
        -- 拿到Start状态对应的时间
        MAX(CASE WHEN Status = 'Start' THEN `Date` END) AS start_time,
        -- 拿到END状态对应的时间
        MAX(CASE WHEN Status = 'END' THEN `Date` END) AS end_time
    FROM play_schedule
    -- 过滤掉Break状态,我们只需要开始和结束时间
    WHERE Status IN ('Start', 'END')
    -- 按戏剧名称分组,确保每部戏剧只取一组开始/结束时间
    GROUP BY Play_name
) AS play_times;

针对不同数据库的调整

如果你的数据库不是MySQL,比如PostgreSQL,可以用时间差的提取函数来替代TIMESTAMPDIFF:

SELECT 
    Play_name,
    CASE 
        WHEN EXTRACT(EPOCH FROM (end_time - start_time)) / 60 < 60 THEN 'Yes'
        ELSE 'NO'
    END AS under_hour
FROM (
    SELECT 
        Play_name,
        MAX(CASE WHEN Status = 'Start' THEN "Date" END) AS start_time,
        MAX(CASE WHEN Status = 'END' THEN "Date" END) AS end_time
    FROM play_schedule
    WHERE Status IN ('Start', 'END')
    GROUP BY Play_name
) AS play_times;

补充说明

  • 如果同一部戏剧有多场演出(即多个Start/END对),你需要额外添加场次标识来分组,避免时间计算混乱。
  • 示例中用MAX函数提取时间是因为每部戏剧对应唯一的Start和END记录,用MIN也能达到同样效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:30:23