我有一张看起来像这样的桌子(真正的桌子有日期和时间代替字母):
| assigned | start | end | xyz | A | B | xyz | B | C | xyz | C | D | xyz | D | E | xyz | E | F | fgh | A | B | fgh | B | C
等
每个指定代码(xyz,fgh等)都有一个旋转,其中'end'与下一个'start'一致,直到指示定义结束的值(此处为'F')。
我正在寻找一个声明,它扫描/验证这个旋转确实发生了,它从A开始并以F结束并且直到那时才进行每一步。
非常感谢任何帮助。
编辑:旋转总是使用5行(或4个步骤),即使间隔长度可以在两者之间发生变化。
答案 0 :(得分:0)
这真的是一个有效的黑客,因为日期被字符取代,但它可能会为你提供如何让它真正起作用的想法。
select * from (
select a_code, min(a_start) as thestart, max(a_end) as theend,
substring(group_concat(a_start order by a_start), 3) as starts,
substring(group_concat(a_end order by a_end), 1, length(group_concat(a_end))-2) as ends
from so_test
group by a_code ) as grpSelect
where thestart = 'a'
and theend = 'f'
and starts = ends
xyz的a_start的group_concat产生一个'a,b,c,d,e'的字符串,而a_end的group_concat产生b,c,d,e,f。子字符串从开头删除a,从结尾删除f,以便外部查询可以比较两个字符串中的b,c,d,e。