[英]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.