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

按已过去年份分组:联系人分组统计查询技术求助

按日期规则分组统计联系人的SQL查询

没问题!我来帮你搞定这个分组统计的SQL查询~核心思路是用CASE语句根据你指定的日期规则给每个联系人打上分组标签,再按标签分组计数就行。下面针对几种常用数据库给出具体示例,你可以按需选用:

MySQL/MariaDB 版本

SELECT
  CASE
    WHEN date_field IS NULL THEN '日期为空'
    -- 先判断10年以上的情况,避免逻辑覆盖
    WHEN DATE(date_field) < DATE_SUB(CURDATE(), INTERVAL 10 YEAR) THEN '10年以上'
    WHEN DATE(date_field) < DATE_SUB(CURDATE(), INTERVAL 3 YEAR) THEN '3-10年'
    ELSE '3年以内'
  END AS date_group,
  COUNT(*) AS contact_count
FROM contacts
GROUP BY date_group
ORDER BY contact_count DESC; -- 可选:按计数从高到低排序

说明:用DATE(date_field)是为了截断字段中的时间部分(如果有的话),确保只按日期比较;CURDATE()获取当前日期,DATE_SUB计算指定间隔前的日期。

PostgreSQL 版本

SELECT
  CASE
    WHEN date_field IS NULL THEN '日期为空'
    WHEN date_trunc('day', date_field) < CURRENT_DATE - INTERVAL '10 years' THEN '10年以上'
    WHEN date_trunc('day', date_field) < CURRENT_DATE - INTERVAL '3 years' THEN '3-10年'
    ELSE '3年以内'
  END AS date_group,
  COUNT(*) AS contact_count
FROM contacts
GROUP BY date_group
ORDER BY contact_count DESC;

说明:date_trunc('day', date_field)用于截断时间部分,CURRENT_DATE获取当前日期,直接用INTERVAL语法计算时间差更直观。

SQL Server 版本

SELECT
  CASE
    WHEN date_field IS NULL THEN '日期为空'
    WHEN CAST(date_field AS DATE) < DATEADD(YEAR, -10, GETDATE()) THEN '10年以上'
    WHEN CAST(date_field AS DATE) < DATEADD(YEAR, -3, GETDATE()) THEN '3-10年'
    ELSE '3年以内'
  END AS date_group,
  COUNT(*) AS contact_count
FROM contacts
GROUP BY date_group
ORDER BY contact_count DESC;

说明:CAST(date_field AS DATE)转换为纯日期格式,DATEADD用于计算N年前的日期,GETDATE()获取当前时间(会自动截断为日期比较)。

小提示

  • 分组标签的文字(比如'10年以上')可以根据你的需求自由修改;
  • 如果你的日期字段本身就是纯日期类型(不带时间),可以去掉DATE()/date_trunc()/CAST()这些转换操作,直接用原字段比较即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:18:51