我正在尝试运行一个按日期字段对联系人进行分组的查询,然后返回每个分组的计数。如果日期字段的空值是一个组,如果日期字段是10+多年前,则是另一个组,如果日期字段是3-10年前,则是第三个组,如果日期字段是<3年前,则是最终分组。
在这方面的任何帮助都将非常感谢。
发布于 2018-01-16 23:14:17
您需要在GROUP子句中使用CASE语句:
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()。
发布于 2018-01-16 23:19:42
http://sqlfiddle.com/#!9/86b630/2
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`发布于 2018-01-17 00:33:10
您可以在准备值的位置使用子选择,然后对其进行解析和分组:
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 periodhttps://stackoverflow.com/questions/48283980
复制相似问题