我有这个数据库查询:
SELECT * FROM Events e
WHERE e.TimestampTicks >= @StartTicks
ORDER BY e.TimestampTicks
LIMIT @Limit
@StartTicks
和@Limit
是传入的变量。
我需要查询的行为有点不同。我希望@Limit
更多。对于任何给定的TimestampTicks值(64位有符号整数),我需要该值的所有行。我无法拆分任何一组TimestampTicks。如何修改查询以实现此目的?
答案 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