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

求SQL查询语句:按EOMONTH分组标记新客户状态

SQL查询:标记新客户并按月末日期分组

需求概述

编写SQL查询实现:

  • 首次产生发票的新客户标记为1(代表"NEW"),非新客户标记为0
  • 按当月最后一天(EOMONTH(Date))分组展示

数据表字段

  • Date:发票日期
  • Account_Id:客户账户ID
  • Account_Name:客户名称
  • Revenue:发票收入

期望输出

DateAccount IdAccount NameRevenueStatus
30/06/2023123123 Limited£1231
30/06/202312341234 Limited£10000

解决方案(SQL Server)

1. 按月聚合收入的版本

SELECT
    EOMONTH(Date) AS Date,
    Account_Id AS [Account Id],
    Account_Name AS [Account Name],
    SUM(Revenue) AS Revenue,
    CASE
        WHEN EOMONTH(MIN(Date) OVER (PARTITION BY Account_Id)) = EOMONTH(Date)
        THEN 1
        ELSE 0
    END AS Status
FROM
    YourTableName
GROUP BY
    EOMONTH(Date),
    Account_Id,
    Account_Name,
    CASE
        WHEN EOMONTH(MIN(Date) OVER (PARTITION BY Account_Id)) = EOMONTH(Date)
        THEN 1
        ELSE 0
    END
ORDER BY
    Date, [Account Id];

2. 单条发票记录的版本(无需聚合)

SELECT
    EOMONTH(Date) AS Date,
    Account_Id AS [Account Id],
    Account_Name AS [Account Name],
    Revenue,
    CASE
        WHEN EOMONTH(MIN(Date) OVER (PARTITION BY Account_Id)) = EOMONTH(Date)
        THEN 1
        ELSE 0
    END AS Status
FROM
    YourTableName
ORDER BY
    Date, [Account Id];

关键逻辑说明

  • 用窗口函数MIN(Date) OVER (PARTITION BY Account_Id)获取每个客户的首次开票日期
  • 通过EOMONTH()将日期转换为当月月末,实现按月分组和新客户判断
  • CASE语句对比当前记录的月末与客户首次开票的月末,一致则标记为新客户(1),否则为老客户(0)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 08:43:28