首页 SQLServer SQLServer 图书借还为两条数据,查询时需一一匹配对应

SQLServer 图书借还为两条数据,查询时需一一匹配对应

作者:胡同里的砖头 围观群众:297 更新于:2021-10-27

time为借和还的时间,h_person为借阅人
当有人借图书的时候,产生一条数据,归还的时候还会产生一条
读取数据的时候,需要把借和还这两条数据做匹配,然后计算时差,包括(借阅人,借阅时长,借出时间,归还时间)

;WITH cte AS (
SELECT *,
ROW_NUMBER() OVER (PARTITION BY h_person ORDER BY [time]) rn--按h_person分组,rn按分组数据记录序号
FROM [t_history] WHERE h_opt<>0
)
SELECT DATEDIFF(hour, a.[time], b.[time]) AS h_time,
a.h_person,a.[time] as borrowtime,b.[time] as returntime
FROM cte a
JOIN cte b
ON a.rn + 1 = b.rn--借为1,归还为2,一一对应,这里直接以序号做为条件,例:借为1,1+1=2,那就匹配上rn为2的数据,例如A用户第五次借了,那么这时候rn序号这第五次的值为9,9+1=10,那匹配自然是9和10这两个数据是一对
AND b.h_person = a.h_person
WHERE a.rn % 2 = 1--所有数据都是从借开始,有借有还,所以筛选条件必须为奇数

  • 本文标题: SQLServer 图书借还为两条数据,查询时需一一匹配对应
  • 文章分类:【SQLServer】
  • 非特殊说明,本文版权归【胡同里的砖头】个人博客 所有,转载请注明出处.
留言评论
站点声明:
1、本站【胡同里的砖头】个人博客,借鉴网上一些博客模板,取其各优点模块自行拼装开发,本博客开发纯属个人爱好。
2、所有笔记提供给广大用户交流使用,可转载,可复制,纯个人开发所遇问题锦集记录使用
Copyright © huzlblog.com All Rights Reserved. 备案号:苏ICP备2021056683号-8