sql根据条件查询最近的一条记录

hitrico 2018-01-02 04:53:28
我有一个表
id 书名 价格 日期
1 a 1.5 2017.11.1
2 a 1.3 2017.11.2
3 a 1.1 2017.11.4
4 b 3.5 2017.11.1
5 b 3 2017.11.3
6 c 10 2017.11.2
7 c 8 2017.11.5

现在想同时查询a,b书 id为3跟5这两条记录根据日期往前最近一次的数据,应该怎么写,谢谢
...全文
1116 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hitrico 2018-01-03
  • 打赏
  • 举报
回复
引用 5 楼 zjcxc 的回复:
select b.*
from tb a
	cross apply(
		select top 1 * from tb bb
		where bb.书名 = a.书名 and bb.id <> a.id
		order by abs(datediff(day, a.日期, bb.日期)) -- 如果最近的意思是离指定的记录天数最少的话
	)b
where a.id in (3, 5)
另外需要的是最近的往前历史记录,按照order by abs(datediff(day, a.日期, bb.日期) 结果是前后都可以了
hitrico 2018-01-03
  • 打赏
  • 举报
回复
引用 5 楼 zjcxc 的回复:
select b.*
from tb a
	cross apply(
		select top 1 * from tb bb
		where bb.书名 = a.书名 and bb.id <> a.id
		order by abs(datediff(day, a.日期, bb.日期)) -- 如果最近的意思是离指定的记录天数最少的话
	)b
where a.id in (3, 5)
你好,我有个疑问,top 1 出来不是应该是1条记录吗?谢谢
zjcxc 2018-01-02
  • 打赏
  • 举报
回复
select b.*
from tb a
	cross apply(
		select top 1 * from tb bb
		where bb.书名 = a.书名 and bb.id <> a.id
		order by abs(datediff(day, a.日期, bb.日期)) -- 如果最近的意思是离指定的记录天数最少的话
	)b
where a.id in (3, 5)
yellowrace 2018-01-02
  • 打赏
  • 举报
回复
select * from ( select *,row_number() as over(partition by bookid order by 日期 desc) as rank from bookrecord where bookid in(3,5) ) as t where rank=2
hitrico 2018-01-02
  • 打赏
  • 举报
回复
引用 1 楼 z10843087 的回复:
把你想要的数据是什么样的也发出来一下
id 书名 价格 日期 1 a 1.5 2017.11.1 2 a 1.3 2017.11.2 3 a 1.1 2017.11.4 4 b 3.5 2017.11.1 5 b 3 2017.11.3 6 c 10 2017.11.2 7 c 8 2017.11.5 现在想同时查询a,b书 id为3跟5这两条记录根据日期往前最近一次的数据 获取到的数据是a,b输id为2跟4这两条数据
yellowrace 2018-01-02
  • 打赏
  • 举报
回复
select * from ( select *,row_number() as over(partition by bookid order by 日期 desc) as rank from bookrecord where bookid in(3,5) ) as t where rank=1
OwenZeng_DBA 2018-01-02
  • 打赏
  • 举报
回复
把你想要的数据是什么样的也发出来一下

22,301

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧