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,
请说明是用的什么数据库。
一般这种用开窗函数做分组排序就好了,但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