サンプルデータは次のとおりです。
| date | id | version |
| 2013-04-15 | 'ape' | 1.1 |
| 2013-04-15 | 'bat' | 2.1 |
| 2013-04-15 | 'cat' | 3.1 |
| 2013-04-15 | 'dog' | 4.1 |
| 2013-03-15 | 'ape' | 1.0 |
| 2013-03-15 | 'cat' | 3.2 |
| 2013-03-15 | 'dog' | 3.8 |
| 2013-02-15 | 'ape' | 0.9 |
| 2013-02-15 | 'dog' | 3.1 |
クエリは、最新の日付と 2 番目に新しい日付を決定します。例では、これは 2013-4-15 と 2013-3-15 です。
私が知っていることなので、おそらくこのコードでそれらを見つけるでしょう:
DECLARE @FirstDate DATETIME
SET @FirstDate = (SELECT max(date)
FROM mytable)
DECLARE @SecondDate DATETIME
SET @SecondDate = (SELECT max(date)
FROM mytable
WHERE date < @FirstDate)
次のような出力が必要です。
| date | id | version | prevdate | pversion |
| 2013-04-15 | 'ape' | 1.1 | 2013-03-15 | 1.0 |
| 2013-04-15 | 'bat' | 2.1 | 2013-03-15 | null |
| 2013-04-15 | 'cat' | 3.1 | 2013-03-15 | 3.2 |
| 2013-04-15 | 'dog' | 4.1 | 2013-03-15 | 3.8 |
したがって、クエリは日付 = FirstDate のすべての行を検索します。そして、各行について、date = SecondDate 行を調べ、同じ ID を持つ行のバージョン番号を含めます。同じ id の date = SecondDate 行がない場合は、"null" または "" または 0 などを返します。