2015-01-09 3 views
-1

Скажем, у меня есть эта таблица:Получение предыдущее значение столбца записи, то

|ID|ForeignKey|Number| 
| 1| A  |  5| 
| 2| B  |  3| 
| 3| A  |  2| 
| 4| B  |  5| 

, и я хочу, чтобы получить этот результат:

|ForeignKey|PrevNumber|CurNumber| 
| A  |   0|  5| 
| B  |   0|  3| 
| A  |   5|  2| 
| B  |   3|  5| 

Так как я могу восстановить предыдущий атрибут записи, то? Я пробовал использовать различные виды присоединиться как левый, внутренний, но безрезультатно

+1

Что вы хотите спросить? – Virbhadrasinh

+0

Как достичь результата, показанного на второй таблице? – coffeecat

+1

Но какова логика столбца PrevNumber? Откуда у вас это PrevNumbers (0,0,5,3)? –

ответ

0

Попробуйте это:

SELECT A.ForeignKey, COALESCE(B.Number, 0) AS PrevNumber, A.Number AS CurNumber 
FROM table1 A 
LEFT JOIN table1 B ON A.ForeignKey = B.ForeignKey AND A.ID > B.ID 
ORDER BY A.ID 

Проверяйте SQL FIDDLE DEMO

OUTPUT

| FOREIGNKEY | PREVNUMBER | CURNUMBER | 
|------------|------------|-----------| 
|   A |   0 |   5 | 
|   B |   0 |   3 | 
|   A |   5 |   2 | 
|   B |   3 |   5 | 

:: EDIT ::

SELECT A.ForeignKey, COALESCE(B.Number, 0) AS PrevNumber, A.Number AS CurNumber, COALESCE(C.Number, 0) AS NextNumber 
FROM table1 A 
LEFT JOIN table1 B ON A.ForeignKey = B.ForeignKey AND A.ID > B.ID 
LEFT JOIN table1 C ON A.ForeignKey = C.ForeignKey AND A.ID < C.ID 
ORDER BY A.ID 

Проверить SQL FIDDLE DEMO

ВЫВОД

| FOREIGNKEY | PREVNUMBER | CURNUMBER | NEXTNUMBER | 
|------------|------------|-----------|------------| 
|   A |   0 |   5 |   2 | 
|   B |   0 |   3 |   5 | 
|   A |   5 |   2 |   0 | 
|   B |   3 |   5 |   0 | 
+0

Это именно то, чего я пытаюсь достичь! Большое спасибо! – coffeecat

0

попробовать этот

select d.FK,ISNULL(d.Prev,0) as Prev,d.Num1 as CurNumber from (
select t.Number as Num1,t.ForeignKey as FK, 
(select top 1 NUmber from test where ID=t.ID-2) as Prev 
    from test t 
    )d 

ВЫВОД

FK Prev CurNumber 
A 0  5 
B 0  3 
A 5  2 
B 3  5 
Смежные вопросы