Files
inventory_analytics/inventory_sync/sql.py
T
2026-04-20 15:02:17 +08:00

128 lines
4.0 KiB
Python

POSTGRES_QUERY = """
WITH inventory_latest AS (
SELECT
t."统一规格编码",
t."仓库主键",
t."物理总库存"
FROM (
SELECT
f."统一规格编码",
f."仓库主键",
f."快照时间",
f."物理总库存",
ROW_NUMBER() OVER (
PARTITION BY f."统一规格编码", f."仓库主键"
ORDER BY f."快照时间" DESC
) AS rn
FROM analytics_layer.fact_inventory_snapshot f
WHERE f."数据来源系统" = '旺店通'
AND NULLIF(TRIM(f."统一规格编码"), '') IS NOT NULL
) t
WHERE t.rn = 1
),
inventory_summary AS (
SELECT
"统一规格编码",
SUM("物理总库存") AS "总库存"
FROM inventory_latest
GROUP BY "统一规格编码"
),
shop_listing_latest AS (
SELECT
t."统一规格编码",
t."店铺主键",
t."商品挂单量"
FROM (
SELECT
f."统一规格编码",
f."店铺主键",
f."快照时间",
f."商品挂单量",
ROW_NUMBER() OVER (
PARTITION BY f."统一规格编码", f."店铺主键"
ORDER BY f."快照时间" DESC
) AS rn
FROM analytics_layer.fact_shop_listing_snapshot f
WHERE f."数据来源系统" = '旺店通店铺'
AND NULLIF(TRIM(f."统一规格编码"), '') IS NOT NULL
) t
WHERE t.rn = 1
),
sales_summary AS (
SELECT
fs."统一规格编码",
SUM(
CASE
WHEN fs."发货时间" >= date_trunc('month', now())
AND fs."发货时间" < date_trunc('month', now()) + INTERVAL '1 month'
THEN fs."销售数量"
ELSE 0
END
) AS "本月销售数量",
SUM(
CASE
WHEN fs."发货时间" >= date_trunc('month', now()) - INTERVAL '1 month'
AND fs."发货时间" < date_trunc('month', now())
THEN fs."销售数量"
ELSE 0
END
) AS "上月销售数量",
SUM(
CASE
WHEN fs."发货时间" >= date_trunc('month', now()) - INTERVAL '2 month'
AND fs."发货时间" < date_trunc('month', now()) - INTERVAL '1 month'
THEN fs."销售数量"
ELSE 0
END
) AS "上上月销售数量"
FROM analytics_layer.fact_sales fs
WHERE NULLIF(TRIM(fs."统一规格编码"), '') IS NOT NULL
AND fs."发货时间" >= date_trunc('month', now()) - INTERVAL '2 month'
AND fs."发货时间" < date_trunc('month', now()) + INTERVAL '1 month'
GROUP BY fs."统一规格编码"
),
product_dim AS (
SELECT DISTINCT ON ("统一规格编码")
"统一规格编码",
"品牌名称",
"货品简称",
"一级分类",
"商品名称",
"条形码",
"零售价"
FROM analytics_layer.dim_product
WHERE NULLIF(TRIM("统一规格编码"), '') IS NOT NULL
ORDER BY "统一规格编码"
)
SELECT
sl."统一规格编码",
pd."品牌名称",
pd."货品简称",
pd."一级分类",
pd."商品名称",
pd."条形码",
pd."零售价",
ds."店铺名称",
COALESCE(sl."商品挂单量", 0) AS "店铺挂单量",
COALESCE(inv."总库存", 0) AS "总库存",
COALESCE(ss."本月销售数量", 0) AS "本月销售数量",
COALESCE(ss."上月销售数量", 0) AS "上月销售数量",
COALESCE(ss."上上月销售数量", 0) AS "上上月销售数量"
FROM shop_listing_latest sl
LEFT JOIN inventory_summary inv
ON sl."统一规格编码" = inv."统一规格编码"
LEFT JOIN analytics_layer.dim_shop ds
ON sl."店铺主键" = ds."店铺主键"
LEFT JOIN sales_summary ss
ON sl."统一规格编码" = ss."统一规格编码"
LEFT JOIN product_dim pd
ON sl."统一规格编码" = pd."统一规格编码"
ORDER BY sl."统一规格编码", sl."店铺主键"
"""