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

如何基于日期条件重复数据行并填充Frequency字段?

基于日期条件重复数据行并生成对应Frequency值

现有数据

CallColumn BFrequency
Test12023-07-19''
Test 22023-07-01''
Test 22023-06-01''

预期结果

CallColumn BFrequency
Test12023-07-19DTD
Test12023-07-19WTD
Test12023-07-19MTD
Test12023-07-19YTD
Test 22023-07-01MTD
Test 22023-07-01YTD
Test 22023-06-01YTD

规则说明

  • 日期为当日:生成DTD、WTD、MTD、YTD四种行
  • 日期为当周非当日:生成WTD、MTD、YTD三种行
  • 日期为当月非当周:生成MTD、YTD两种行
  • 日期为当年非当月:仅生成YTD行

解决方案

用CROSS JOIN结合频率选项表,再通过日期条件过滤匹配的频率值,比多次UNION更简洁高效。以下是SQL Server适配的示例代码:

-- 定义所有需要的频率类型
WITH FrequencyList AS (
    SELECT 'DTD' AS Frequency UNION ALL
    SELECT 'WTD' UNION ALL
    SELECT 'MTD' UNION ALL
    SELECT 'YTD'
),
-- 替换为你的实际数据表
RawData AS (
    SELECT Call, [Column B] AS DateCol
    FROM YourTableName
)
SELECT 
    rd.Call,
    rd.DateCol AS [Column B],
    fl.Frequency
FROM RawData rd
CROSS JOIN FrequencyList fl
WHERE
    (
        -- 当日:保留所有频率
        CONVERT(DATE, rd.DateCol) = CONVERT(DATE, GETDATE())
        OR
        -- 当周非当日:保留WTD、MTD、YTD
        (DATEPART(WEEK, rd.DateCol) = DATEPART(WEEK, GETDATE()) 
         AND DATEPART(YEAR, rd.DateCol) = DATEPART(YEAR, GETDATE())
         AND CONVERT(DATE, rd.DateCol) != CONVERT(DATE, GETDATE())
         AND fl.Frequency IN ('WTD', 'MTD', 'YTD'))
        OR
        -- 当月非当周:保留MTD、YTD
        (DATEPART(MONTH, rd.DateCol) = DATEPART(MONTH, GETDATE()) 
         AND DATEPART(YEAR, rd.DateCol) = DATEPART(YEAR, GETDATE())
         AND DATEPART(WEEK, rd.DateCol) != DATEPART(WEEK, GETDATE())
         AND fl.Frequency IN ('MTD', 'YTD'))
        OR
        -- 当年非当月:仅保留YTD
        (DATEPART(YEAR, rd.DateCol) = DATEPART(YEAR, GETDATE())
         AND DATEPART(MONTH, rd.DateCol) != DATEPART(MONTH, GETDATE())
         AND fl.Frequency = 'YTD')
    )
ORDER BY rd.Call, rd.DateCol, 
    CASE fl.Frequency 
        WHEN 'DTD' THEN 1 
        WHEN 'WTD' THEN 2 
        WHEN 'MTD' THEN 3 
        WHEN 'YTD' THEN 4 
    END;

适配说明

如果使用MySQL,只需替换:

  • GETDATE() → CURDATE()
  • DATEPART(WEEK, ...) → WEEK(...)
  • DATEPART(MONTH, ...) → MONTH(...)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:56:35