求一条SQL

一卷阳光 2010-06-18 01:35:39
求一条SQL

有两个表A、B

表A NO、col1、col2为PK

NO col1 col2 col3
1 2010-06-16 08:00 a
2 2010-06-17 08:00 b
3 2010-06-18 09:00 c
3 2010-06-18 10:00 d
4 2010-06-18 10:00 d


表B NO、col1、col2为PK
NO col1 col2 col3
1 2010-06-16 08:00 50
2 2010-06-17 08:00 60
3 2010-06-18 07:00 70
3 2010-06-18 08:00 80
3 2010-06-18 09:00 90

要求查询出
A表资料及与A表中日期、NO相同
且小于等于A表时间的 B表col3

例如:

1 2010-06-16 08:00 a null
2 2010-06-17 08:00 b 60
3 2010-06-18 09:00 c 80
3 2010-06-18 10:00 d 90
4 2010-06-18 10:00 d null
...全文
88 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
一卷阳光 2010-06-18
  • 打赏
  • 举报
回复
不好意思,第一次结贴给错分了。多谢rmljoe & chuifengde
一卷阳光 2010-06-18
  • 打赏
  • 举报
回复
多谢各位大哥
rmljoe 2010-06-18
  • 打赏
  • 举报
回复

--修正一下
-- 建模拟数据
create table tb_A (NO int,col1 varchar(10),col2 varchar(5),col3 varchar(5))
go
insert into tb_A select 1,'2010-06-16','08:00','a'
union all select 2,'2010-06-17','08:00','b'
union all select 3,'2010-06-18','09:00','c'
union all select 3,'2010-06-18','10:00','d'
union all select 4,'2010-06-18','10:00','d'
go
create table tb_B (NO int,col1 varchar(10),col2 varchar(5),col3 int)
go
insert into tb_B select 1,'2010-06-16','08:00',50
union all select 2,'2010-06-17','08:00',60
union all select 3,'2010-06-18','07:00',70
union all select 3,'2010-06-18','08:00',80
union all select 3,'2010-06-18','09:00',90
go


-- 测试
select
NO,
col1,
col2,
(select top 1 b.col3 from tb_B b where a.col1 = b.col1 and a.no = b.no and b.col2 <= a.col2 order by b.col2 desc) as col3
from tb_A a

-- 结果
/*
NO col1 col2 col3
----------- ---------- ----- -----------
1 2010-06-16 08:00 50
2 2010-06-17 08:00 60
3 2010-06-18 09:00 90
3 2010-06-18 10:00 90
4 2010-06-18 10:00 NULL

(5 行受影响)
*/

rmljoe 2010-06-18
  • 打赏
  • 举报
回复
-- 豆子
-- 建模拟数据
create table tb_A (NO int,col1 varchar(10),col2 varchar(5),col3 varchar(5))
go
insert into tb_A select 1,'2010-06-16','08:00','a'
union all select 2,'2010-06-17','08:00','b'
union all select 3,'2010-06-18','09:00','c'
union all select 3,'2010-06-18','10:00','d'
union all select 4,'2010-06-18','10:00','d'
go
create table tb_B (NO int,col1 varchar(10),col2 varchar(5),col3 int)
go
insert into tb_B select 1,'2010-06-16','08:00',50
union all select 2,'2010-06-17','08:00',60
union all select 3,'2010-06-18','07:00',70
union all select 3,'2010-06-18','08:00',80
union all select 3,'2010-06-18','09:00',90
go


-- 测试
select
NO,
col1,
col2,
(select top 1 b.col3 from tb_B b where a.col1 = b.col1 and a.no = b.no and b.col2 < a.col2 order by b.col2 desc)
from tb_A a

-- 结果
/*
NO col1 col2
----------- ---------- ----- -----------
1 2010-06-16 08:00 NULL
2 2010-06-17 08:00 NULL
3 2010-06-18 09:00 80
3 2010-06-18 10:00 90
4 2010-06-18 10:00 NULL

(5 行受影响)
*/
shixixi1987 2010-06-18
  • 打赏
  • 举报
回复
不同字段
chuifengde 2010-06-18
  • 打赏
  • 举报
回复
DECLARE @a TABLE(NO INT, col1 VARCHAR(10), col2 VARCHAR(7), col3 CHAR(1))

insert @a select 1 ,'2010-06-16','08:00' ,'a'
union all select 2 ,'2010-06-17','08:00' ,'b'
union all select 3 ,'2010-06-18','09:00' ,'c'
union all select 3 ,'2010-06-18','10:00' ,'d'
union all select 4 ,'2010-06-18','10:00' ,'d'

DECLARE @b TABLE(NO INT, col1 VARCHAR(10), col2 VARCHAR(7), col3 int)
INSERT @b SELECT 1 ,'2010-06-16', '08:00', 50
union all select 2 ,'2010-06-17', '08:00', 60
union all select 3 ,'2010-06-18', '07:00', 70
union all select 3 ,'2010-06-18', '08:00', 80
union all select 3 ,'2010-06-18', '09:00', 90


SELECT *,(SELECT TOP 1 col3 FROM @b WHERE no=a.no AND col1=a.col1 AND col2<=a.col2 ORDER BY col2 desc)
FROM @a a
--result
/*NO col1 col2 col3
----------- ---------- ------- ---- -----------
1 2010-06-16 08:00 a 50
2 2010-06-17 08:00 b 60
3 2010-06-18 09:00 c 90
3 2010-06-18 10:00 d 90
4 2010-06-18 10:00 d NULL

(所影响的行数为 5 行)

*/
shixixi1987 2010-06-18
  • 打赏
  • 举报
回复
你那个年月日跟时分时分开的吗?
一卷阳光 2010-06-18
  • 打赏
  • 举报
回复
请各位大哥帮忙再看看
一卷阳光 2010-06-18
  • 打赏
  • 举报
回复

1 2010-06-16 08:00 a null 是打错了,应该是50 查不到就是null
TheGodOfGods 2010-06-18
  • 打赏
  • 举报
回复

1 2010-06-16 08:00 a null

为什么是null?而不是50?
chuifengde 2010-06-18
  • 打赏
  • 举报
回复
看不懂结果
一卷阳光 2010-06-18
  • 打赏
  • 举报
回复
哪里不清楚?
一卷阳光 2010-06-18
  • 打赏
  • 举报
回复
补充:且小于等于A表时间的 B表col3

时间要最接近A表时间的 B表col3
jwdream2008 2010-06-18
  • 打赏
  • 举报
回复
要求描述不清晰!

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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