gpt4 book ai didi

mysql - 如何只消除连续重复而不是选择查询(MySQL)中的所有重复?

转载 作者:行者123 更新时间:2023-11-29 03:20:56 24 4
gpt4 key购买 nike

我有一个这样的表:

17 年 7 月 1 日 100
17 年 7 月 2 日 100
2017 年 7 月 3 日 300
2017 年 7 月 4 日 300
2017 年 7 月 5 日 500
2017 年 7 月 6 日 500
2017 年 7 月 7 日 300
2017 年 7 月 8 日 400
2017 年 7 月 9 日 100
2017 年 7 月 10 日 100


我要输出的是(按此顺序)通过消除连续重复但不是所有重复:
100
300
500
300
400
100

我不能选择 Distinct,因为它会消除 300、100 的第二个实例。有没有办法在 MySQL 中实现这个结果?谢谢!

最佳答案

您想获取以前的值。如果日期确实没有间隔或重复,只需执行以下操作:

select t.*
from t left join
t tprev
on t.col1 = date_add(tprev.col1, interval 1 day)
where tprev.col2 is null or tprev.col2 <> t.col2;

编辑:

如果日期不满足这些条件,那么您可以使用变量:

select t.*
from (select t.*,
(@rn := if(@v = col2, @rn + 1,
if(@v := col2, 1, 1)
)
) as rn
from t cross join
(select @v := 0, @rn := 0) params
order by t.col1
) t
where rn = 1;

请注意,MySQL 不保证 SELECT 中表达式的求值顺序。因此,变量不应在一个表达式中赋值,然后在另一个表达式中使用——它们应该在单个表达式中赋值。

关于mysql - 如何只消除连续重复而不是选择查询(MySQL)中的所有重复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45292361/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com