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

如何通过SQL展示重复会议的所有重复日期记录?

实现重复会议日期的逐条展示

要实现将重复会议的所有日期逐条列出,核心是生成事件起始到结束日期之间的所有日期序列,再与原表关联展开每条记录。以下针对主流数据库给出实现方案:

前提说明

假设EventType字段用于标记重复类型(例如'Daily'代表每日重复),如果没有该字段,可根据EventName筛选重复事件(比如筛选EventName = 'Daily scrum')。

1. PostgreSQL 实现

利用generate_series生成日期序列,直接关联原表展开:

SELECT
    'Event: ' || e.EventName AS event_line,
    'Date: ' || TO_CHAR(series_date, 'FMDDth Mon YYYY, HH12am') AS date_line
FROM
    Events e
CROSS JOIN
    generate_series(
        DATE_TRUNC('day', e.EventStart),
        DATE_TRUNC('day', e.EventEnd),
        INTERVAL '1 day'
    ) AS series_date
WHERE
    e.EventType = 'Daily' -- 筛选每日重复事件
    AND e.EventName = 'Daily scrum' -- 可选:指定特定事件
ORDER BY
    series_date;

2. SQL Server 实现

使用递归CTE生成日期序列:

WITH DateSeries AS (
    SELECT
        e.EventId,
        e.EventName,
        CAST(e.EventStart AS DATE) AS series_date,
        e.EventEnd
    FROM Events e
    WHERE e.EventType = 'Daily' AND e.EventName = 'Daily scrum'
    UNION ALL
    SELECT
        ds.EventId,
        ds.EventName,
        DATEADD(DAY, 1, ds.series_date),
        ds.EventEnd
    FROM DateSeries ds
    WHERE ds.series_date < CAST(ds.EventEnd AS DATE)
)
SELECT
    'Event: ' + EventName AS event_line,
    'Date: ' + FORMAT(series_date, 'd\th MMM yyyy, hhtt') AS date_line
FROM DateSeries
ORDER BY series_date
OPTION (MAXRECURSION 0); -- 解除递归深度限制(如果日期跨度大)

3. MySQL 实现

使用递归CTE(MySQL 8.0+支持):

WITH RECURSIVE DateSeries AS (
    SELECT
        EventId,
        EventName,
        DATE(EventStart) AS series_date,
        EventEnd
    FROM Events
    WHERE EventType = 'Daily' AND EventName = 'Daily scrum'
    UNION ALL
    SELECT
        EventId,
        EventName,
        DATE_ADD(series_date, INTERVAL 1 DAY),
        EventEnd
    FROM DateSeries
    WHERE series_date < DATE(EventEnd)
)
SELECT
    CONCAT('Event: ', EventName) AS event_line,
    CONCAT(
        'Date: ',
        DATE_FORMAT(series_date, '%D %b %Y, %h%p')
    ) AS date_line
FROM DateSeries
ORDER BY series_date;

输出说明

以上查询会生成与你预期格式一致的结果,每条事件日期占两行(Event行和Date行),不同记录间的空行可通过客户端工具设置格式,或在查询中通过UNION ALL额外添加空行记录(需注意排序逻辑)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 01:25:24