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 回答