这是示例数据:
| 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 |
查询将确定最新日期和第二个最新日期。在示例中,这是 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 或其他内容。