0

サンプルデータは次のとおりです。

|    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 などを返します。

4

1 に答える 1