其实是可以做到的,
概念是用分组排序,来找出与自己日期相差最少的,即是自己的"下一笔"。
手边没有MSSQL,凭空写不确定有没有错,请试试看:
SELECT Date1 [Date], Orders, daydiff NextDataDayDiff
FROM
(
SELECT Date1, Orders, daydiff
, Row_Number() OVER (PARTITION BY Date1 ORDER BY daydiff) RW
FROM
(
SELECT t1.Date Date1, t2.Date Date2, t1.Orders
, datediff(day,t1.Date ,t2.Date) AS daydiff
FROM @Temp t1 with(nolock)
LEFT JOIN @Temp t2 with(nolock)
ON t1.Date<t2.Date
) temp
) temp
WHERE RW=1
※ 引述《Severine (赛非茵)》之铭言:
: DB: MS SQL
: 估狗了很久 刚刚也在本版搜寻了一下类似问题 找不太到..
: 只好发文问一下!
: 我想要取得每笔纪录的时间间隔 请问该怎么做呢?
: =========================================================
: 问完以后改写了一个blueshop的范例
: DECLARE @Temp table (Date datetime, Orders int)
: INSERT INTO @Temp VALUES ('2012/2/1',1000)
: INSERT INTO @Temp VALUES ('2012/2/2',800)
: INSERT INTO @Temp VALUES ('2012/2/3',3500)
: INSERT INTO @Temp VALUES ('2012/2/4',4000)
: SELECT
: T1.Date ,
: ISNULL(datediff(day,T2.Date ,T1.Date),null) AS daydiff
: FROM @Temp AS T1
: LEFT JOIN @Temp AS T2 ON T1.Date = DATEADD(d,1,T2.Date)
: ===============以上可以算出后四笔的相差时间==============
: 但是以下就不行,想必是对left join用法的理解错误
: DECLARE @Temp table (Date datetime, Orders int)
: INSERT INTO @Temp VALUES ('2012/2/1',1000)
: INSERT INTO @Temp VALUES ('2012/2/12',800) <=修改过
: INSERT INTO @Temp VALUES ('2012/2/13',3500) <=
: INSERT INTO @Temp VALUES ('2012/2/24',4000) <=
: SELECT
: T1.Date ,
: ISNULL(datediff(day,T2.Date ,T1.Date),null) AS daydiff
: FROM @Temp AS T1
: LEFT JOIN @Temp AS T2 ON T1.Date = DATEADD(d,1,T2.Date)
: ========================================================
: 请问该如何修改呢? 谢谢 ><