FIELD
FIELD(s,s1,s2...)
SELECT FIELD("c", "a", "b", "c", "d", "e"); -- 返回字符串 c 在列表值中的位置,索引位置从 1 开始,没有返回 0
FIND_IN_SET
FIND_IN_SET(s1,s2)
SELECT FIND_IN_SET("c", "a,b,c,d,e"); -- 使用,分割为列表,返回字符串 c 在列表中的位置,索引位置从 1 开始,没有返回 0
对于一对多的情况,可能还是left join的效率更高。
LEAD
LEAD(<expression>[,offset[, default_value]]) OVER (
PARTITION BY (expr)
ORDER BY (expr)
)
select
dt,
lead(1) over(order by dt desc) as num_1
from test;
dt为创建时间,按照dt倒序并取第二条,就是前一天数据
参考
MySQL 中 FIND_IN_SET 使用和性能
关于 find_in_set 的性能问题