LaL*_*aLa 2 sql t-sql database sql-server sql-server-2008
我有一张桌子:
Book ¦Time Out ¦Time In
123456789 ¦01/01/2013 ¦07/07/2013
123456788 ¦15/01/2013 ¦20/01/2013
123456788 ¦23/01/2013 ¦30/01/2013
123144563 ¦01/02/2013 ¦18/02/2013
123144563 ¦20/02/2013 ¦NULL
124567892 ¦03/03/2013 ¦10/03/2013
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像这样:
Book ¦Time Out ¦Time In ¦Next Time Out
123456789 ¦01/01/2013 ¦07/07/2013 ¦NULL
123456788 ¦15/01/2013 ¦20/01/2013 ¦23/01/2013
123456788 ¦23/01/2013 ¦30/01/2013 ¦NULL
123144563 ¦01/02/2013 ¦18/02/2013 ¦20/02/2013
123144563 ¦20/02/2013 ¦NULL ¦NULL
124567892 ¦03/03/2013 ¦10/03/2013 ¦NULL
Run Code Online (Sandbox Code Playgroud)
码:
SELECT nextout.Book,
nextout.[Time In] AS NextTimeIn
FROM BookTable nextout
JOIN BookTable nextoutsec
ON nextout.Book = nextoutsec.Book
WHERE nextout.[Time In] = (SELECT MAX(maxtbl.[Time In])
FROM BookTable maxtbl
WHERE maxtbl.Book = nextout.Book)
Run Code Online (Sandbox Code Playgroud)
这将为重复的书籍ID返回相同的"下一次超时".而不是1个正确的值和1个空值.
谢谢!
未经测试,但以下内容应该让你开始
;WITH q as (
SELECT Book, [Time In], ROW_NUMBER() OVER (PARTITION BY Book ORDER BY [Time In]) AS rn
FROM BookTable
)
SELECT bt.*, q2.[Time In] AS NextTimeIn
FROM BookTable bt
INNER JOIN q q1 ON q1.Book = bt.Book AND ISNULL(q1.[Time In], 0) = ISNULL(bt.[Time In], 0)
LEFT OUTER JOIN q q2 ON q2.Book = q1.Book AND q2.rn = q1.rn + 1
Run Code Online (Sandbox Code Playgroud)
这个的要点是
q 为每本书添加一个行号,按顺序排列 [Time In]q2加入q1以获得下一个[Time In]值.q1加入BookTable以获取所有原始值| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |