簡體   English   中英

我正在尋找此數據庫查詢的“軟”限制

[英]I'm looking for a “soft” limit on this database query

我有這個數據庫查詢:

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

@StartTicks@Limit是傳入的變量。

我需要查詢的行為有所不同。 我希望@Limit至少是最小值。 對於任何給定的TimestampTicks值(64位帶符號整數),我需要該值的所有行。 我不能拆分任何一組TimestampTicks。 如何修改查詢以實現此目的?

您是否要查找大於@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。

計算您要查找的閾值,然后使用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 ,以獲取TimestampTicks的極限值。 (為此,我也可以使用select max(TimestampTicks) 。)然后將此閾值用作where條件。

以下是您想要的。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM