A、B、C、D の 4 つのテーブルがあります。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
)