1

私のテーブルのタプルは次のようになります:(値、日付、属性)。ここで、データベースにクエリを実行して範囲を取得しますが、日付ではなく、「...の範囲の最後のxエントリ」の数に依存します。次の例で明確になります。attribute="x"のすべてのエントリが日付列で並べ替えられているタイムバーがあるため、ポイントsとtの日付は、ポイント0の日付とポイントxの日付よりも小さくなります。もちろん、yはポイント0よりも大きくなります。すべてのポイントには属性="a"があります。

      s        t  0  x        y
------|--------|--|--|--------|------> t

ここで、次の特性を持つすべてのエントリを取得します。s--tおよびx--yからすべてのエントリを取得します。ここで、attribute = "a"で、この範囲で60のエントリを取得するように、sとtを選択します。 5つのエントリがそれぞれtと0、およびxとyの間にあるようにします。

サンプルデータは次のとおりです。

(xyz, 01.02.2000, a)
(xyz, 02.02.2000, a)
(xyz, 01.02.2000, b)
(xyz, 03.02.2000, a)
(xyz, 01.02.2000, b)
(xyz, 04.02.2000, a)
(xyz, 06.02.2000, a)
(xyz, 01.02.2000, b)
(xyz, 07.02.2000, a)
(xyz, 01.02.2000, b)
(xyz, 10.02.2000, a)
(xyz, 12.02.2000, a)

日付=06.02.2000および範囲st=3、t-0=1の望ましい出力は次のようになります。

s = (xyz, 01.02.2000, a)
(xyz, 02.02.2000, a)
t = (xyz, 03.02.2000, a)
(xyz, 04.02.2000, a) NOT because between t and 0 should be 1 free
0 = (xyz, 06.02.2000, a)

そして反対方向では、タイムバーの「正しい」方向はまったく同じです...

現時点では、日付と制限(5、60)で並べ替えた2つのクエリを使用していますが、もっと良い方法があると思います...この方法はわかりません;-)

4

1 に答える 1

0

唯一の実用的な方法は、2 つの LIMIT されたクエリ間で UNION を使用することだと思います。一方は昇順で並べ替え、もう一方は降順で並べ替えます。これは、2 つの間隔のいずれかに必要な数の行があるという保証がないためです。

于 2012-09-20T18:15:33.837 に答える