查询本次以及上次记录同时显示

来源:互联网 发布:tourex b2b2c源码 编辑:程序博客网 时间:2024/04/30 07:31
环境:SQL SERVER 2008 R2
具体见下:

表中内容
名称  地点         日期
--------------------------------------
bbb   江苏        2016-06-01 16:30:28
aaa   河南        2016-06-01 16:29:01
bbb   河北   2016-05-30 06:35:24
aaa   江苏        2016-05-30 10:39:28
aaa   河北        2016-04-27 11:33:49


查询【2016-05-30】到【2016-06-01】期间的所有对应名称的地点、日期、上次地点、上次日期
希望的结果如下所示:

名称  地点         日期                  上次地点       上次日期
-------------------------------------------------------------------
aaa   河南        2016-06-01 16:29:01    江苏 2016-05-30 10:39:28
aaa   江苏        2016-05-30 10:39:28    河北         2016-04-27 11:33:49
bbb   江苏        2016-06-01 16:30:28    河北    2016-05-30 06:35:24

bbb   河北        2016-05-30 06:35:24    

------------------------------------------------------------------------------------

DECLARE @bt DATETIME='2016-05-30';
DECLARE @et DATETIME='2016-06-01';
SET @et=DATEADD(d,1,@et);
;WITH testSource(名称,地点,日期) AS (
SELECT 'bbb','江苏','2016-06-01 16:30:28' union all
SELECT 'aaa','河南','2016-06-01 16:29:01' union all
SELECT 'bbb','河北','2016-05-30 06:35:24' union all
SELECT 'aaa','江苏','2016-05-30 10:39:28' union all
SELECT 'aaa','河北','2016-04-27 11:33:49'
)
,t AS (
SELECT *,rn=ROW_NUMBER()OVER(PARTITION BY 名称 ORDER BY 日期 desc) 
FROM testSource
)
SELECT t1.地点,t1.日期,t2.地点 上次地点,t2.日期  上次日期
FROM t t1 
LEFT JOIN t t2 ON t1.名称=t2.名称 AND t1.rn=t2.rn-1
WHERE t1.日期>=@bt AND t1.日期<@et
ORDER BY t1.名称,t1.rn

0 0
原创粉丝点击