首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >按年份分组

按年份分组
EN

Stack Overflow用户
提问于 2018-01-16 22:51:49
回答 3查看 45关注 0票数 0

我正在尝试运行一个按日期字段对联系人进行分组的查询,然后返回每个分组的计数。如果日期字段的空值是一个组,如果日期字段是10+多年前,则是另一个组,如果日期字段是3-10年前,则是第三个组,如果日期字段是<3年前,则是最终分组。

在这方面的任何帮助都将非常感谢。

EN

回答 3

Stack Overflow用户

发布于 2018-01-16 23:14:17

您需要在GROUP子句中使用CASE语句:

代码语言:javascript
运行
复制
SELECT  CASE 
            WHEN floor(DATEDIFF(EndDate, StartDate)/365) < 3 THEN '<3'
            WHEN floor(DATEDIFF(EndDate, StartDate)/365) < 10 THEN '3-10'
            WHEN floor(DATEDIFF(EndDate, StartDate)/365) = 10 THEN '=10'
            ELSE '>10' 
        END AS `Length`
FROM    ...
WHERE   ...
GROUP   BY  CASE 
                WHEN floor(DATEDIFF(EndDate, StartDate)/365) < 3 THEN '<3'
                WHEN floor(DATEDIFF(EndDate, StartDate)/365) < 10 THEN '3-10'
                WHEN floor(DATEDIFF(EndDate, StartDate)/365) = 10 THEN '=10'
                ELSE '>10' 
            END
ORDER   BY Length ASC;

如果您的结束日期是现在,只需使用NOW()

票数 0
EN

Stack Overflow用户

发布于 2018-01-16 23:19:42

http://sqlfiddle.com/#!9/86b630/2

代码语言:javascript
运行
复制
SELECT IF(my_date IS NULL, 'NO DATE', 
          IF(YEAR(NOW())-YEAR(my_date)>10,'>10', 
            IF(YEAR(NOW())-YEAR(my_date)>3,'3-10','<3')
          )
         ) `period`, COUNT(id)
FROM contacts
GROUP BY `period`
票数 0
EN

Stack Overflow用户

发布于 2018-01-17 00:33:10

您可以在准备值的位置使用子选择,然后对其进行解析和分组:

代码语言:javascript
运行
复制
select case 
when elapsed is null then 'missing'
when elapsed <= 1095 then 'new'
when elapsed <= 3650 then 'middle'
else 'old'
end as period, count(*)
from
(select datediff(now(), yourdate) period from yourtable) t
group by period
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48283980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档