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

SQL按Item分组:获取指定状态对应的最小、最大日期需求问询

解决方案:按Item分组获取指定状态的日期极值

原始数据

ItemDateStatus Column
WidgetA2022-01-031
WidgetB2022-01-041
WidgetA2022-01-052
WidgetB2022-01-062
WidgetA2022-01-021
WidgetB2022-01-011

期望结果

Itemstartcomplete
WidgetA2022-01-022022-01-05
WidgetB2022-01-012022-01-06

实现方案

1. SQL 实现

用条件聚合就能直接完成需求,通过CASE WHEN筛选指定状态的行,再结合聚合函数计算极值,最后按Item分组:

SELECT
    Item,
    MIN(CASE WHEN `Status Column` = 1 THEN Date END) AS start,
    MAX(CASE WHEN `Status Column` = 2 THEN Date END) AS complete
FROM
    your_table_name  -- 替换成你的实际表名
GROUP BY
    Item;
  • MIN(CASE WHEN ...):仅保留状态为1的日期,取其中最小值作为start
  • MAX(CASE WHEN ...):仅保留状态为2的日期,取其中最大值作为complete
  • GROUP BY Item:确保每个Item只输出一行聚合结果

2. Python Pandas 实现

如果用Pandas处理数据,有两种简洁的写法:

写法一:agg 聚合

import pandas as pd

# 假设原始数据存储在df中
result = df.groupby('Item').agg(
    start=('Date', lambda x: x[df.loc[x.index, 'Status Column'] == 1].min()),
    complete=('Date', lambda x: x[df.loc[x.index, 'Status Column'] == 2].max())
).reset_index()

写法二:pivot_table 透视表

import pandas as pd

result = df.pivot_table(
    index='Item',
    values='Date',
    columns='Status Column',
    aggfunc={1: 'min', 2: 'max'}
).rename(columns={1: 'start', 2: 'complete'}).reset_index()

两种写法都能得到你需要的结果,根据习惯选择即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 14:35:16