【问题标题】:Mysql search if last 3 records exist with same orderMysql搜索最后3条记录是否以相同的顺序存在
【发布时间】:2015-04-01 00:19:51
【问题描述】:

我有一张表格,里面有一列数字

35
24
7
8
11
35
9
11
6
6
23
23
34
5
14
31
26
2
16
0
6
23
23

我想检查最后 3 条记录是否

6
23
23

存在于以前的记录中,但顺序相同,结果是下一个数字。

在我的例子中:

6
23
23

以相同的顺序存在,结果必须是:34

【问题讨论】:

  • 您还有其他决定顺序的列吗?
  • 是的,我还有另一个列 id(总共 2 列 id 和编号)
  • 你有机会尝试我的答案吗?
  • 是的,但是我做错了,我是 mysql 查询的新手……我与函数融为一体,我的表名是 vista,有 2 列 id(自动整数)和数字(varchar(2))我必须改变什么,因为我犯了这个错误:错误代码:1146。表'test.t'不存在
  • 我已经更新了我的答案以反映该表名为 vista 以及列 id 和 number,请立即尝试 :)

标签: mysql sql exists


【解决方案1】:

假设您的数字按名为 id 的 auto_incremented 列排序,则此查询应该有效:

select numbers 
from vista 
where id = (
    select b.id + 3 from (
      select t1.id, t1.numbers t1val, t2.numbers t2val, t3.numbers t3val 
      from vista t1 
      join vista t2 on t1.id = t2.id-1 
      join vista t3 on t1.id = t3.id-2 
      where t1.id = (select max(id) - 2 from vista)
    ) a
    join (
      select t1.id, t1.numbers t1val, t2.numbers t2val, t3.numbers t3val 
      from vista t1 
      join vista t2 on t1.id = t2.id-1 
      join vista t3 on t1.id = t3.id-2 
      where t1.id < (select max(id) - 2 from vista)
    ) b 
  on a.t1val = b.t1val 
  and a.t2val = b.t2val 
  and a.t3val = b.t3val 
  and a.id <> b.id
) 
order by id limit 1;

如果id 列不包含序列,您可以使用适当的行编号查询生成序列。

Sample SQL Fiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-25
    • 2019-12-24
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 1970-01-01
    相关资源
    最近更新 更多