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

环境: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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值