-- 以客户维度展示客户的每日下单量以及每周的下单量（每周日到周六）
SELECT
    c.Id AS CustomerId,
    c.CustomerCode,
    c.CustomerName,
    -- 每日下单量
    DATE(lrr.CreatedAt) AS OrderDate,
    COUNT(*) AS DailyOrderCount,
    -- 每周下单量（按周日到周六计算）
    CONCAT(YEARWEEK(lrr.CreatedAt, 0), '周') AS WeekNumber,
    COUNT(*) OVER (PARTITION BY c.Id, YEARWEEK(lrr.CreatedAt, 0)) AS WeeklyOrderCount
FROM
    customers c
JOIN
    label_replace_requests lrr ON c.Id = lrr.CustomerId
WHERE
    lrr.ReplaceStatus = 'Y' -- 只统计有效订单
GROUP BY
    c.Id,
    c.CustomerCode,
    c.CustomerName,
    DATE(lrr.CreatedAt),
    YEARWEEK(lrr.CreatedAt, 0)
ORDER BY
    c.CustomerName,
    OrderDate;

-- 另一种形式：分别展示每日和每周汇总（每周日到周六）
SELECT
    c.Id AS CustomerId,
    c.CustomerCode,
    c.CustomerName,
    'Daily' AS PeriodType,
    DATE(lrr.CreatedAt) AS Period,
    COUNT(*) AS OrderCount
FROM
    customers c
JOIN
    label_replace_requests lrr ON c.Id = lrr.CustomerId
WHERE
    lrr.ReplaceStatus = 'Y'
GROUP BY
    c.Id,
    c.CustomerCode,
    c.CustomerName,
    DATE(lrr.CreatedAt)
UNION ALL
SELECT
    c.Id AS CustomerId,
    c.CustomerCode,
    c.CustomerName,
    'Weekly' AS PeriodType,
    CONCAT(YEARWEEK(lrr.CreatedAt, 0), '周') AS Period,
    COUNT(*) AS OrderCount
FROM
    customers c
JOIN
    label_replace_requests lrr ON c.Id = lrr.CustomerId
WHERE
    lrr.ReplaceStatus = 'Y'
GROUP BY
    c.Id,
    c.CustomerCode,
    c.CustomerName,
    YEARWEEK(lrr.CreatedAt, 0)
ORDER BY
    CustomerName,
    PeriodType,
    Period;