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

SQL实现按经销商统计各品牌可售状态及停售天数的需求

解决汽车经销商指定品牌状态统计的SQL方案

核心思路

  1. 先获取全量经销商列表,确保覆盖从未售卖目标品牌的经销商;
  2. 针对指定品牌,筛选经销商的对应记录,优先识别当前可售状态,若无可售则提取最近的售卖结束日期;
  3. 通过条件判断输出符合要求的状态值:可售显示0、不可售计算天数差、无记录显示NULL。

SQL实现示例(以MySQL为例)

-- 替换'Toyota'为你需要统计的目标品牌,可售标记'Y'请根据实际数据调整
WITH dealer_list AS (
    -- 获取所有唯一经销商ID,若有单独的经销商维度表可直接用该表
    SELECT DISTINCT dealership_ID
    FROM dealership_cars
),
target_brand_records AS (
    SELECT 
        dealership_ID,
        -- 标记当前是否可售
        MAX(CASE WHEN `Available?` = 'Y' THEN 1 ELSE 0 END) AS is_available,
        -- 获取最近一次售卖结束的日期
        MAX(sold_date) AS last_sold_date
    FROM dealership_cars
    WHERE make = 'Toyota'
    GROUP BY dealership_ID
)
SELECT 
    dl.dealership_ID,
    CASE
        WHEN tbr.is_available = 1 THEN 0
        WHEN tbr.last_sold_date IS NOT NULL THEN DATEDIFF(CURDATE(), tbr.last_sold_date)
        ELSE NULL
    END AS target_brand_status
FROM dealer_list dl
LEFT JOIN target_brand_records tbr ON dl.dealership_ID = tbr.dealership_ID
-- 可选:筛选特定经销商,比如示例中的612
WHERE dl.dealership_ID = 612;

关键细节说明

  • 若使用其他数据库,需调整日期计算函数:
    • PostgreSQL:用CURRENT_DATE替换CURDATE(),天数差用DATE_PART('day', CURRENT_DATE - last_sold_date)
    • SQL Server:用GETDATE()替换CURDATE(),天数差用DATEDIFF(day, last_sold_date, GETDATE())
    • Oracle:用SYSDATE替换CURDATE(),天数差用TRUNC(SYSDATE) - TRUNC(last_sold_date)
  • Available?的取值(如'Yes'/'No'或布尔值)需与实际数据匹配,对应修改CASE判断条件;
  • 若存在从未有任何车辆记录的经销商,必须关联单独的经销商维度表,否则会遗漏这类经销商。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:32:32