我有四个表:A、B、C、D。D 对 C 有一个 FK,C 对 B 有一个 FK,B 对 A 有一个 FK。每个表都有一个 ID 列。除了 ID 和 CID,表 D 还具有 Value 和 Timestamp(整数)。给定某个时间,我需要时间戳之前的 D 行,但每个 CID 最接近它的行——除非时间戳之前没有行,在这种情况下,我需要时间戳之后的第一个值。我正在使用 Sqlite。
忽略最后一个要求,我尝试使用此查询获取时间戳之前的值,但返回的 ID 是错误的:
SELECT *
FROM D d
INNER JOIN C c ON d.CID = c.ID
INNER JOIN B b ON C.BID = b.ID
WHERE b.AID = @AID AND d.Timestamp =
(
SELECT MAX(d2.Timestamp)
FROM D d2
WHERE d2.Timestamp < @StartTime
AND d2.CID = D.CID
)