I have a table where I need to maintain record versioning based on records insertion and update on per day basis. The "RecordVersion" table looks like below:
VersionID RecordID RecordValue DateID (FK Calendar)
--------- -------- ----------- ------
1 R1 50 1
2 R2 60 1
3 R3 100 2
4 R2 80 2
5 R3 150 5
6 R4 200 5
And the "Calendar" table looks like:
DateID Date
------ --------
1 1-May-19
2 2-May-19
3 3-May-19
4 4-May-19
5 5-May-19
6 6-May-19
How RecordVersion table is getting populated:
- On 1-May-19, Record R1 and R2 got inserted
- On 2-May-19, a new Record R3 got inserted and exiting R2 updated (R1 remained unchanged). So for both new "insert" and "update" operations new version numbers were generated
- On 3-May-19 and 4-May-19 no changes were made no version records were generated
- On 5-May-19 again there were another new "Insert" and "Update" so two version were crated
Output(VersionHistory) should be like below:
DateID VersionID RecordID RecordValue
1 1 R1 50 --Initial Record
1 2 R2 60
2 1 R1 50 -- Non Versioned
2 4 R2 80 -- Versioned for Update (50>80)
2 3 R3 100 -- New Insert
3 1 R1 50 |
3 4 R2 80 --- No Change -- Just Replicate Prev.
3 3 R3 100 |
4 1 R1 50 |
4 4 R2 80 --- No Change -- Just Replicate Prev.
4 3 R3 100 |
5 1 R1 50 -- Non Versioned
5 4 R2 80 -- Non Versioned
5 5 R3 150 -- Versioned for Update (100>150)
5 6 R4 200 -- New Insert
It would be great if someone could generate the above output using TSQL. My SQLServer version is :
Microsoft SQL Azure (RTM) - 12.0.2000.8