Glossary · Evidence & data
Bitemporal Data
Also called: valid time and transaction time
Bitemporal data is a record of facts kept on two independent time axes: valid time, when each fact was true in the world, and transaction time, when the database held that version of it.
A bitemporal record can answer "what did we believe on date K about date S?". When a fact changes in the world, a new valid period starts. When the record is corrected, a new version is added with the same valid period and a later transaction time. Nothing is overwritten, so the history of the world and the history of what was known are both kept.
Formal definition
Snodgrass defines valid time as when a fact was true in reality and transaction time as when it was stored in the database; a table supporting both is bitemporal. The 2011 edition of the Structured Query Language (SQL) standard, SQL:2011, allows one table to be both an application-time period table (valid time) and a system-versioned table (transaction time); the standard does not itself use the word "bitemporal", which comes from the literature.
Two axes, set by different parties
- Valid time (application time) is supplied by the user from evidence: effective dates, completion dates, as-of dates. It can be in the past, present or future and can be corrected.
- Transaction time (system time) is set by the database. In SQL:2011 system-versioned tables, users cannot assign or change it; an insert sets the start to the transaction time stamp, and an update or delete closes the current row and keeps it as a historical row. Kulkarni and Michels note that this guarantees the recorded history of changes cannot be tampered with, which matters for audit and compliance.
Transaction time is not the date a source was captured. A document captured on Monday and loaded on Wednesday has a Monday capture date (an evidence date) and a Wednesday transaction time.
How SQL:2011 implements it
- A period is declared on a pair of date or timestamp columns (PERIOD FOR ...). Periods are closed-open.
- A table with a user-named period is an application-time period table; one with the SYSTEM_TIME period and WITH SYSTEM VERSIONING is system-versioned; a table can be both.
- Queries can ask for any past system state: FOR SYSTEM_TIME AS OF a time stamp, FROM ... TO (closed-open) or BETWEEN ... AND (closed-closed). Without these clauses, a query returns current rows only.
- Updates and deletes can apply to part of a valid period (FOR PORTION OF).
- A bitemporal query combines both axes: for example, the department an employee was in on one date, as recorded in the database on another.
Temporal tables entered the SQL standard in SQL:2011. Products implement them to different extents, so the syntax available varies.
Changes and corrections
The distinction that bitemporal data exists to preserve:
- A change in the world (a new chief investment officer, a fund extension) closes one valid period and opens another.
- A correction of the record (the previous end date was wrong) adds a new version with the corrected valid period and closes the old version's transaction period.
A system with only valid time cannot tell these apart afterwards: a corrected period looks as if it had always been recorded that way. A system with only transaction time can show what changed in the record but not when the fact took effect.
Why it matters in private markets
- Explaining past decisions. What did the team know about a manager, its key people and its fund sizes on the date of the investment committee? That is an as-known question. See point-in-time data.
- Restated figures. NAVs, track records and fund sizes are restated; both the original and the restated values remain retrievable.
- Role and relation histories. Late-discovered departures and appointments can be back-dated in valid time without hiding when they were learned. See temporal validity.
- Audit. System-maintained history gives an audit trail that users cannot rewrite, one part of a value's data provenance.
Design and storage choices
- Deleting rows destroys transaction history; a fact recorded in error is closed in transaction time, not deleted.
- Letting users edit transaction time defeats the purpose.
- Far-future sentinels. SQL system-versioned tables set the end of a current row to the highest value of the column type. For valid time, a sentinel end encodes "no end observed"; it should not be read as a statement that the fact is still true.
- Storage and query cost grow with history; indexes and retention policies need to be planned, not added later.
How Altss applies this (Altss methodology)
Under Altss methodology, each version of a claim carries a valid-time interval and a transaction-time interval. Transaction time is append-only: when a claim changes, the new version is added and the old version's transaction interval is closed. A correction to a past value is recorded as a new version with the same valid time and a later transaction time; nothing is deleted or overwritten. A new version carries its own validation status while the earlier version keeps the status and date it held; each version's value keeps its derivation status, and each evidence item its evidence origin. Past states are retrieved in the current, as-was and as-known views. See the Temporal Data & Freshness Methodology.
Worked example
Illustrative chief investment officer change recorded late
| Version | Holder | Valid time | Transaction time |
|---|---|---|---|
| v1 | Person A | [1 Jan 2019, end unknown) | [15 Jan 2019, 10 Sep 2024) |
| v2 | Person A | [1 Jan 2019, 1 Jul 2024) | [10 Sep 2024, current) |
| v3 | Person B | [1 Jul 2024, end unknown) | [10 Sep 2024, current) |
On 10 September 2024 the plan's published minutes show that A left on 30 June and B started on 1 July. v1 is closed in transaction time and v2 and v3 are added.
- "Who was CIO on 15 August 2024, as recorded on 1 September 2024?" returns A: that was the record then.
- "Who was CIO on 15 August 2024, as recorded today?" returns B.
Both answers are correct for their question, and both remain retrievable.
Examples are illustrative; figures are not market data.
Not the same as
- Temporal Validity: Temporal validity is the valid-time axis alone; bitemporal data adds transaction time, so a correction stays distinguishable from a change.
- Point-in-Time Data: Point-in-time data is the use case (reproducing what was known); bitemporal storage is one way to provide it.
- Data Provenance: Data provenance records where a value came from and how it was produced, including the audit trail of changes to the record; bitemporal data adds when each fact was true in the world.
Common mistakes
- Storing one date per row and calling it temporal.
- Treating a correction as if the world had changed, or a change as if the record had been wrong.
- Using the source capture date as the transaction time.
- Allowing users or batch jobs to rewrite system time stamps.
- Deleting erroneous rows instead of closing them.
Edge cases
- Retroactive facts: valid time starts before transaction time.
- Proactive facts: a future appointment is recorded now with a future valid start.
- Correcting only part of a valid period splits the row into pieces (FOR PORTION OF in SQL:2011).
- A fact recorded in error and then withdrawn remains visible in as-known views for the period it was held.
Questions
Is a system-versioned table bitemporal?
No. A system-versioned table keeps transaction time only. It becomes bitemporal when it also has an application-time (valid-time) period.
Sources
- Developing Time-Oriented Database Applications in SQL. Richard T. Snodgrass, Morgan Kaufmann, Morgan Kaufmann Series in Data Management Systems; ISBN 1-55860-436-7. Status: Out of print; author-hosted PDF (checked 2026-10-01). Sec. 1.1 (kinds of time); ch. 2, sec. 2.3 (bitemporal tables) — supports: Valid time and transaction time; a table supporting both is bitemporal
- Temporal features in SQL:2011. Krishna Kulkarni; Jan-Eike Michels, ACM SIGMOD Record, Vol. 41(3), pp. 34-43. Status: Published (checked 2026-10-01). Sections 2.1-2.4 (footnote 5 on the term "bitemporal") — supports: SQL:2011 period definitions, system-versioned and application-time period tables, AS OF / FROM ... TO / BETWEEN queries, bitemporal queries, tamper-resistant history
Related terms
5 termsConcept record
- Concept ID
- ALTSS-DATA-013
- Classification
- Evidence & data
- Topics
- Private markets data & OSINT
- Version
- 2.0.0
- Last reviewed
- Structured data
- JSON