我正在寻找这个数据库查询的“软”限制

时间:2013-02-12 19:50:46

标签: sql sqlite group-by

我有这个数据库查询:

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

@StartTicks@Limit是传入的变量。

我需要查询的行为有点不同。我希望@Limit更多。对于任何给定的TimestampTicks值(64位有符号整数),我需要该值的所有行。我无法拆分任何一组TimestampTicks。如何修改查询以实现此目的?

3 个答案:

答案 0 :(得分: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。

答案 1 :(得分: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条件。

答案 2 :(得分: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