我使用的是 SQL Server 2008。我很想使用最新的軟體,但我對此沒有發言權。我有一些資料,下面是我正在嘗試做的一個非常簡單的版本:
| 參考編號 | 年 |
|---|---|
| 123456789 | 2000年 |
| 123456789 | 2001年 |
| 123456789 | 2002年 |
| 223456789 | 2005年 |
| 223456789 | 2006年 |
| 223456789 | 2007年 |
我正在尋找的結果如下:
| 參考編號 | 年 | 上一年 |
|---|---|---|
| 123456789 | 2000年 | 空值 |
| 123456789 | 2001年 | 2000年 |
| 123456789 | 2002年 | 2001年 |
| 223456789 | 2005年 | 空值 |
| 223456789 | 2006年 | 2005年 |
| 223456789 | 2007年 | 2006年 |
我已經使用 group by 嘗試了一些更新陳述句,但運氣不佳。這似乎是一件很簡單的事情,但我是 SQL 的新手,所以任何幫助將不勝感激!
uj5u.com熱心網友回復:
做一個自己 LEFT JOIN:
select t1.refNumber, t1.Year, t2.Year AS PrevYear
from tablename t1
left join tablename t2 on t1.year = t2.year 1
and t1.refNumber = t2.refNumber
(由于您的示例資料對所有行都具有相同的 refNumber,我不確定您是否需要該and t1.refNumber = t2.refNumber部分。)
uj5u.com熱心網友回復:
我會嘗試這樣的事情:
select a.refNumber
, a.Year
, b.Year as PrevYear
from myTable a
left join myTable b on a.Year = (b.Year 1)
uj5u.com熱心網友回復:
您可以使用 Lag 函式來執行此操作:
SELECT *,
Lag(Year, 1) OVER(ORDER BY primaryKey_or_uniqKey ASC) AS PrevYear
FROM tablename ;
你可以在這里閱讀它。
正如您所說,它在 Sqlserver 2008 中不存在,您可以這樣做:
With init as (
SELECT t.*,
ROW_NUMBER() OVER (ORDER BY primaryKey_or_uniqKey) AS rn
FROM tablename t
), result AS (
SELECT i1.*,
i2.Year AS LastMonthData
FROM init AS i1
LEFT JOIN init AS i2 ON i1.rn = i2.rn 1
)
select * from result;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/323670.html
標籤:sql sql-server
下一篇:將YYYY-MM列添加到現有表
