1

次のようなテーブルがあります (実際のテーブルには文字の代わりに日付と時刻があります)。

| | 割り当てられた | 開始 | 終わり
| | xyz | あ | B     
| | xyz | ビ | C     
| | xyz | シー | D     
| | xyz | D | え     
| | xyz | え | ふ    
| | fgh | あ | B
| | fgh | ビ | C

割り当てられたコード (xyz、fgh など) ごとにローテーションが行われます。ここで、'end' は次の 'start' と一致し、定義された終了 (ここでは 'F') を示す値まで一致します。

このローテーションが実際に発生していること、A で始まり F で終わり、それまでのすべてのステップを実行したことをスキャン/検証するステートメントを探しています。

どんな助けでも大歓迎です。

編集:間隔の長さが途中で変わる可能性がある場合でも、回転は常に5行(または4ステップ)を使用します。

4

1 に答える 1

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 を比較できるようにします。

于 2013-11-14T21:00:18.120 に答える