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

分组中首次/末次日期对应交易类型的统计实现问询

嘿,我来帮你搞定这个交易数据的统计需求!针对你提到的「按唯一ID的首次/末次交易时间,统计各交易名称的对应次数」的需求,我分Excel和SQL两种常用场景给你具体方案:

方案一:用Excel实现

如果你的数据在Excel里,我们可以通过辅助列+数据透视表来完成:

  1. 添加首次交易标记列:插入新列(比如D列),命名为「首次交易名称」,输入公式:
    =IF(B2=MINIFS(B:B,A:A,A2),C2,"")
    这个公式会判断当前行的时间戳是不是该唯一ID下的最早时间,是就返回交易名称,否则留空。
  2. 添加末次交易标记列:再插入新列(比如E列),命名为「末次交易名称」,输入公式:
    =IF(B2=MAXIFS(B:B,A:A,A2),C2,"")
    同理,判断当前行是否为该ID的最晚交易时间,返回对应名称。
  3. 创建数据透视表统计:
    • 选中所有数据(含辅助列),点击「插入」→「数据透视表」;
    • 把「首次交易名称」拖到「行」区域,「唯一ID」拖到「值」区域,将值字段设置为「计数」,就能得到各交易名称作为首次交易的总次数;
    • 重复操作,把「末次交易名称」拖到「行」区域,即可得到末次交易的统计结果。
方案二:用SQL实现

如果数据存在数据库中,用SQL可以更高效地完成统计,无需手动添加辅助列:
先通过CTE(公共表表达式)给每个唯一ID计算出首次、末次交易的时间戳,再统计对应交易名称的次数:

WITH id_transaction_info AS (
    SELECT
        A AS unique_id,
        C AS transaction_name,
        B AS transaction_timestamp,
        -- 计算当前ID的最早交易时间
        MIN(B) OVER (PARTITION BY A) AS first_trans_time,
        -- 计算当前ID的最晚交易时间
        MAX(B) OVER (PARTITION BY A) AS last_trans_time
    FROM your_table_name -- 替换成你的表名
)
SELECT
    transaction_name,
    -- 统计作为首次交易的次数
    SUM(CASE WHEN transaction_timestamp = first_trans_time THEN 1 ELSE 0 END) AS first_trans_count,
    -- 统计作为末次交易的次数
    SUM(CASE WHEN transaction_timestamp = last_trans_time THEN 1 ELSE 0 END) AS last_trans_count
FROM id_transaction_info
GROUP BY transaction_name;

注意:如果某个唯一ID的首次和末次交易是同一个名称,这条记录会被同时计入「首次」和「末次」的统计中,符合实际业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:31:02