0

私はこのデータベースクエリを持っています:

SELECT * FROM Events e 
   WHERE e.TimestampTicks >= @StartTicks 
   ORDER BY e.TimestampTicks 
   LIMIT @Limit

@StartTicks@Limitは渡される変数です。

少し異なる動作をするクエリが必要です。@Limitもっとミニマムになりたい。特定の TimestampTicks 値 (64 ビットの符号付き整数) について、その値のすべての行が必要です。TimestampTicks のグループを分割できません。これを実現するためにクエリを変更するにはどうすればよいですか?

4

3 に答える 3

0

@StartTicks より大きい TimestampTicks の最初の値を探し、その値に一致するすべての行を返しますか? その場合、次のようにします。

SELECT e1.*
  FROM Events e1
  JOIN (SELECT MIN(TimestampTicks) AS TimestampTicks
          FROM Events e2
         WHERE TimestampTicks >= @StartTicks) e2
    ON e1.TimestampTicks = e2.TimestampTicks

さらに、一致するすべてのレコードを取得しているため、ORDER BY の必要はないと思います。

于 2013-02-12T19:54:49.950 に答える
0

探しているしきい値を計算し、where句を使用して結果を取得します。

select *
from Events e
where e.TimestampTicks between @StartTicks and
         (select TimestampTicks 
           from (SELECT *
                 FROM Events e 
                 WHERE e.TimestampTicks >= @StartTicks 
                 ORDER BY e.TimestampTicks 
                 LIMIT @Limit
                ) t
           order by TimestampTicks desc
           limit 1
          )

これは、条件を満たす最も内側のサブクエリで @LIMIT 行数を取得することによって機能します。次に、 の制限値を取得するために、それらをTimestampTicksに並べ替えます)。select max(TimestampTicks)(この目的にも使用できます。) このしきい値はwhere条件として使用されます。

于 2013-02-12T19:56:22.607 に答える
0

以下はあなたが望むものです。

SELECT *
FROM Events e
WHERE e.TimestampTicks between @StartTicks 
  AND (SELECT MAX(TimestampTicks)
                              FROM
                              (
                                SELECT TimestampTicks 
                                FROM Events 
                                   WHERE TimestampTicks >= @StartTicks 
                                   ORDER BY TimestampTicks 
                                   LIMIT @Limit
                              )emax
                         )
ORDER BY e.TimestampTicks
于 2013-02-12T20:33:51.187 に答える