sql请教,有点疑惑,不知道要怎么写

user 表
login_id phone deflut cratetime
12345 12345 0 2021-02-01
12345 12345 1 2022-04-01
45678 45678 0 2021-02-01
45678 45678 0 2022-02-01
0表示没有默认,1表示默认

我要根据login_idzhid字段只显示默认的一条数据,如何没有默认字段,根据时间显示最新的一条数据,这个该如何显示

这不太简单了嘛~~分两部分,第一部分查默认的,然后union all没有默认的~~

select 
*
from 
user
where deflut = '1'
union all
select 
p.login_id,
p. phone,
p. deflut,
p. cratetime
from
(select 
*,
row_number() over(partition by login_id order by cratetime desc) rn
from 
user
where deflut = '0') p
where p.rn = 1
;

mysql5.7,

img


img


你这要是作毕业设计,这样写sql写就写了,其他用途,建议增加字段,比如useFlag,在你数据入库的时候,就决定用谁,这时候写查询只要useFlag = 1,比花里胡哨的各种查询可效率高多了

请说明是用的什么数据库。
一般这种用开窗函数做分组排序就好了,但mysql5是不支持的

select * from (
select u.*,row_number() over(patition by login_id order by deflut desc,cratetime desc) rn from user u) as t
where rn=1

以上sql在oracle、mysql8.0、sqlserver、hive、postgresql等等数据库里都是支持的


SELECT login_id ,phone,deflut, cratetime FROM user where deflut=1 ORDER BY cratetime DESC LIMIT 1

SELECT login_id ,phone,deflut, cratetime FROM user ORDER BY deflut DESC ,cratetime DESC LIMIT 1