SQL返回

表如下:

name                 time

XXXXXXXX         2021-09-06

XXX发布XXX         2021-09-06

XX发布XXXX        2021-09-05

XXXXXXX        2021-09-04

mysql数据库:

如果name包含发布字样,取最新的包含发布的数据,如果name不包含发布字样,取最新time的数据

即:

目前需要SQL返回XXX发布XXX         2021-09-06这条数据。

如果第二条第三条数据不存在则返回XXXXXXXX         2021-09-06这条数据

Coldman 发布于 2021-9-6 09:57 (编辑于 2021-9-6 10:16)
1min目标场景问卷 立即参与
回答问题
悬赏:3 F币 + 添加悬赏
提示:增加悬赏、完善问题、追问等操作,可使您的问题被置顶,并向所有关注者发送通知
共3回答
最佳回答
2
Moki_minLv5初级互助
发布于2021-9-6 10:33

用sql实现的话,你做个辅助列承接你说的【含不含发布】这个逻辑,,然后再排下序,排在第一条的数据就是满足你逻辑的数据。

SELECT 

 t.*

 ,row_number() over(ORDER BY name_group,time DESC)ranker

FROM 

(

select 

  case when name like '%发布%' then 1 else 2 end as name_group

  ,name

  ,time 

FROM TABLE

)t

最佳回答
0
Z4u3z1Lv6专家互助
发布于2021-9-6 09:59

试试

SELECT NAME,MAX(TIME) FROM TABLE group  BY NAME

  • Coldman Coldman(提问者) 这个XXX是不固定的字符串
    2021-09-06 10:01 
  • Z4u3z1 Z4u3z1 回复 Coldman(提问者) 你的描述简化一下就是获取相同NAME下的最近一次TIME瑟????
    2021-09-06 10:03 
  • Coldman Coldman(提问者) 回复 Z4u3z1 name可能是123发布4556,也可能是12发布455666,也可能是12321234
    2021-09-06 10:12 
最佳回答
0
圣体叶小凡Lv6高级互助
发布于2021-9-6 10:08

if( find("发布",sql("JDBC3","select name from table where name like '%发布%'",1,1) )>0 ,sql("JDBC3","select max(time) from table where name like '%发布%'",1,1) ,sql("JDBC3","select max(time) from table where name not like '%发布%'",1,1) )     

  • 3关注人数
  • 452浏览人数
  • 最后回答于:2021-9-6 10:33
    请选择关闭问题的原因
    确定 取消
    返回顶部