69 lines
1.6 KiB
SQL
69 lines
1.6 KiB
SQL
-- 以客户维度展示客户的每日下单量以及每周的下单量(每周日到周六)
|
|
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; |