concat了好大一串

select count(distinct device_id) cnt,
case when day(event_date) between 01 and 09 then concat(year(event_date),'年',mouth(event_date),'月','上旬')
when day(event_date) between 10 and 19 then concat(year(event_date),'年',mouth(event_date),'月','中旬')
when day(event_date)>20then concat(year(event_date),'年',mouth(event_date),'月','下旬') end dt_range
from question_practice_detail
group by dt_range
order by mouth(event_date) desc,cnt desc

这个是我的bug代码,我用时间函数然后链接
select
(
concat(
concat(substr(event_date,1,4),'年'),
concat(substr(event_date,6,2),'月'),
(case
when day(event_date) between 1 and 9 then '上旬'
when day(event_date) between 10 and 19 then '中旬'
when day(event_date) >=20 then '下旬'
end))
)as dt_range,
count(distinct device_id) as cnt
from question_practice_detail
group by dt_range
order by substr(dt_range,6,2) desc, cnt desc
这是答案,用substri提取字符串
但我觉得用时间提取函数也ok吖。

你这个没有数据,也没有题目什么的,也不知道你数据是什么样啊,单看sql也看不出什么结果,如果你试一下查询结果一样那就可能是题目局限性或者数据局限性,只让使用它答案的sql吧

你要做数据库的题,那你电脑上好歹安装个数据库
然后把你自己写的sql执行一下看看,到底报错不报错,如果不报错select出来的结果到底是什么
不要什么都靠猜呀
20then
就你这数字和字母都粘一起了,执行能不报错?

img


题目是这个