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

如何针对指定状态仅展示其最早日期以制作每日演化图表?

解决方案

1. SQL 数据库场景

如果数据存储在数据库中,分两种需求处理:

仅提取状态+最早日期

用分组聚合直接取每个状态的最小日期:

SELECT 状态列名, MIN(日期列名) AS 首次变更日期
FROM 数据表名
GROUP BY 状态列名;

保留完整记录(含该状态最早日期的所有字段)

如果需要保留对应行的全部信息,用窗口函数排序后取第一行:

WITH ranked_data AS (
    SELECT 
        *,
        ROW_NUMBER() OVER (PARTITION BY 状态列名 ORDER BY 日期列名 ASC) AS row_rank
    FROM 数据表名
)
SELECT *
FROM ranked_data
WHERE row_rank = 1;

2. Excel 处理场景

步骤简单直接:

  • 先把数据按「日期列」升序排序,确保同一个状态下最早的日期排在最前面
  • 选中数据区域,点击「数据」→「删除重复值」,只勾选「状态列」,确定后就会保留每个状态的第一条(最早日期)记录

3. Python Pandas 场景

用代码实现自动筛选:

import pandas as pd

# 读取数据(根据实际格式调整,比如xlsx)
df = pd.read_csv("你的数据文件.csv")

# 按日期升序排序,保证最早日期优先
df_sorted = df.sort_values(by="日期列名", ascending=True)

# 按状态去重,保留每组第一条记录
result_df = df_sorted.drop_duplicates(subset="状态列名", keep="first")

# 输出或保存结果
result_df.to_csv("筛选后的数据.csv", index=False)

特殊场景补充:状态多次变更的情况

如果存在状态反复切换(比如A→B→A),需要保留每次状态变更的首次日期,而不是只保留第一次出现的状态日期,SQL可以这么写:

WITH ordered_records AS (
    SELECT 
        *,
        -- 获取上一行的状态
        LAG(状态列名) OVER (ORDER BY 日期列名 ASC) AS prev_status
    FROM 数据表名
    ORDER BY 日期列名 ASC
)
-- 筛选初始状态,或状态发生变化的行
SELECT *
FROM ordered_records
WHERE prev_status IS NULL OR prev_status != 状态列名;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:13:17