有2表
A表
事件ID 事件内容
xg001 事件1
xg002 事件2
B表
事件ID 每周进展情况
xg001 第1周打扫
xg002 第1周开始
xg001 第2周整理
xg001 第3周完成
想查询出,每个事件最新的发展情况 如下结果:
事件ID 事件内容 每周进展情况(最新)
xg001 事件1 第3周完成
xg002 事件2 第1周开始
10 个解决方案
#1
B表应该有一个ID或者时间来表示该行记录是最新的记录
#2
with tabs as
(
select a.事件ID,row_number() over(partition by a.事件ID order by a.事件ID)rn, 事件内容,每周进展情况 from a,b where a.事件ID=b.事件ID
)
select 事件ID, 事件内容,每周进展情况 from tabs p
where p.rn in (
select max(rn) from tabs t where p.事件ID=t.事件ID group by 事件ID
)
最好给B表加个id自增主键,那样查询就简单多了
#3
select a.事件ID,a.事件内容,b.每周进展情况
from A表 a
inner join
(select row_number() over(partition by 事件ID order by getdate()) 'rn',
事件ID,每周进展情况 from B表 b
on a.事件ID=b.事件ID and b.rn=1
#4
#5
那就在B表 增加1列
事件ID 周数 每周进展情况
xg001 1 第1周打扫
xg002 1 第1周开始
xg001 2 第2周整理
xg001 3 第3周完成
想查询出,每个事件最新的发展情况 如下结果:
事件ID 事件内容 每周进展情况(最新)
xg001 事件1 第3周完成
xg002 事件2 第1周开始
事件ID 周数 每周进展情况
xg001 1 第1周打扫
xg002 1 第1周开始
xg001 2 第2周整理
xg001 3 第3周完成
想查询出,每个事件最新的发展情况 如下结果:
事件ID 事件内容 每周进展情况(最新)
xg001 事件1 第3周完成
xg002 事件2 第1周开始
#6
偷学楼上各位的,楼主可以试下
if OBJECT_ID('tabb') is not null
drop table tabb
if OBJECT_ID('taba') is not null
drop table taba
go
create table taba(id char(5) not null primary key,content varchar(5))
create table tabb(id char(5) not null,week int,status varchar(10),constraint re_taba foreign key (id) references taba(id))
go
insert into taba
select 'xg001', '事件1' union all
select 'xg002','事件2'
insert into tabb
select 'xg001',1,'第1周打扫' union all
select 'xg002',1,'第1周开始' union all
select 'xg001',2,'第2周整理' union all
select 'xg001',3,'第3周完成'
select a.ID,content,status from taba a join
(select ID,status,ROW_NUMBER() over(PARTITION by id order by week desc) as rn from tabb )
as b on
a.id=b.id and b.rn=1
#7
#8
IF (OBJECT_ID('A')IS NOT NULL)DROP TABLE A
GO
CREATE TABLE A
(
[事件ID] VARCHAR(100),
[事件内容]VARCHAR(100)
)
GO
INSERT INTO A
SELECT 'xg001','事件1' UNION ALL
SELECT 'xg002','事件2'
GO
IF(OBJECT_ID('B')IS NOT NULL)DROP TABLE B
GO
CREATE TABLE B
(
[事件ID] VARCHAR(100),
[每周进展情况] VARCHAR(800)
)
GO
INSERT INTO B
SELECT 'xg001','第1周打扫' UNION ALL
SELECT 'xg002','第1周开始' UNION ALL
SELECT 'xg001','第2周整理' UNION ALL
SELECT 'xg001','第3周完成'
SELECT A.[事件ID],A.[事件内容],MAX(B.[每周进展情况])as ' 每周进展情况(最新)'
FROM A INNER JOIN B ON A.[事件ID] =B.[事件ID]
GROUP BY A.[事件ID],A.[事件内容]
/*
事件ID 事件内容 每周进展情况(最新)
---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
xg001 事件1 第3周完成
xg002 事件2 第1周开始
(2 行受影响)
*/
#9
select * from a,b
where a.id=b.id
where a.id=b.id
#10
IF (OBJECT_ID('A')IS NOT NULL)DROP TABLE A
GO
CREATE TABLE A
(
[事件ID] VARCHAR(100),
[事件内容]VARCHAR(100)
)
GO
INSERT INTO A
SELECT 'xg001','事件1' UNION ALL
SELECT 'xg002','事件2'
GO
IF(OBJECT_ID('B')IS NOT NULL)DROP TABLE B
GO
CREATE TABLE B
(
[事件ID] VARCHAR(100),
[每周进展情况] VARCHAR(800)
)
GO
INSERT INTO B
SELECT 'xg001','第1周打扫' UNION ALL
SELECT 'xg002','第1周开始' UNION ALL
SELECT 'xg001','第2周整理' UNION ALL
SELECT 'xg001','第3周完成'
SELECT A.[事件ID],A.[事件内容],MAX(B.[每周进展情况])as ' 每周进展情况(最新)'
FROM A INNER JOIN B ON A.[事件ID] =B.[事件ID]
GROUP BY A.[事件ID],A.[事件内容]
GO
CREATE TABLE A
(
[事件ID] VARCHAR(100),
[事件内容]VARCHAR(100)
)
GO
INSERT INTO A
SELECT 'xg001','事件1' UNION ALL
SELECT 'xg002','事件2'
GO
IF(OBJECT_ID('B')IS NOT NULL)DROP TABLE B
GO
CREATE TABLE B
(
[事件ID] VARCHAR(100),
[每周进展情况] VARCHAR(800)
)
GO
INSERT INTO B
SELECT 'xg001','第1周打扫' UNION ALL
SELECT 'xg002','第1周开始' UNION ALL
SELECT 'xg001','第2周整理' UNION ALL
SELECT 'xg001','第3周完成'
SELECT A.[事件ID],A.[事件内容],MAX(B.[每周进展情况])as ' 每周进展情况(最新)'
FROM A INNER JOIN B ON A.[事件ID] =B.[事件ID]
GROUP BY A.[事件ID],A.[事件内容]
#1
B表应该有一个ID或者时间来表示该行记录是最新的记录
#2
with tabs as
(
select a.事件ID,row_number() over(partition by a.事件ID order by a.事件ID)rn, 事件内容,每周进展情况 from a,b where a.事件ID=b.事件ID
)
select 事件ID, 事件内容,每周进展情况 from tabs p
where p.rn in (
select max(rn) from tabs t where p.事件ID=t.事件ID group by 事件ID
)
最好给B表加个id自增主键,那样查询就简单多了
#3
select a.事件ID,a.事件内容,b.每周进展情况
from A表 a
inner join
(select row_number() over(partition by 事件ID order by getdate()) 'rn',
事件ID,每周进展情况 from B表 b
on a.事件ID=b.事件ID and b.rn=1
#4
#5
那就在B表 增加1列
事件ID 周数 每周进展情况
xg001 1 第1周打扫
xg002 1 第1周开始
xg001 2 第2周整理
xg001 3 第3周完成
想查询出,每个事件最新的发展情况 如下结果:
事件ID 事件内容 每周进展情况(最新)
xg001 事件1 第3周完成
xg002 事件2 第1周开始
事件ID 周数 每周进展情况
xg001 1 第1周打扫
xg002 1 第1周开始
xg001 2 第2周整理
xg001 3 第3周完成
想查询出,每个事件最新的发展情况 如下结果:
事件ID 事件内容 每周进展情况(最新)
xg001 事件1 第3周完成
xg002 事件2 第1周开始
#6
偷学楼上各位的,楼主可以试下
if OBJECT_ID('tabb') is not null
drop table tabb
if OBJECT_ID('taba') is not null
drop table taba
go
create table taba(id char(5) not null primary key,content varchar(5))
create table tabb(id char(5) not null,week int,status varchar(10),constraint re_taba foreign key (id) references taba(id))
go
insert into taba
select 'xg001', '事件1' union all
select 'xg002','事件2'
insert into tabb
select 'xg001',1,'第1周打扫' union all
select 'xg002',1,'第1周开始' union all
select 'xg001',2,'第2周整理' union all
select 'xg001',3,'第3周完成'
select a.ID,content,status from taba a join
(select ID,status,ROW_NUMBER() over(PARTITION by id order by week desc) as rn from tabb )
as b on
a.id=b.id and b.rn=1
#7
#8
IF (OBJECT_ID('A')IS NOT NULL)DROP TABLE A
GO
CREATE TABLE A
(
[事件ID] VARCHAR(100),
[事件内容]VARCHAR(100)
)
GO
INSERT INTO A
SELECT 'xg001','事件1' UNION ALL
SELECT 'xg002','事件2'
GO
IF(OBJECT_ID('B')IS NOT NULL)DROP TABLE B
GO
CREATE TABLE B
(
[事件ID] VARCHAR(100),
[每周进展情况] VARCHAR(800)
)
GO
INSERT INTO B
SELECT 'xg001','第1周打扫' UNION ALL
SELECT 'xg002','第1周开始' UNION ALL
SELECT 'xg001','第2周整理' UNION ALL
SELECT 'xg001','第3周完成'
SELECT A.[事件ID],A.[事件内容],MAX(B.[每周进展情况])as ' 每周进展情况(最新)'
FROM A INNER JOIN B ON A.[事件ID] =B.[事件ID]
GROUP BY A.[事件ID],A.[事件内容]
/*
事件ID 事件内容 每周进展情况(最新)
---------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
xg001 事件1 第3周完成
xg002 事件2 第1周开始
(2 行受影响)
*/
#9
select * from a,b
where a.id=b.id
where a.id=b.id
#10
IF (OBJECT_ID('A')IS NOT NULL)DROP TABLE A
GO
CREATE TABLE A
(
[事件ID] VARCHAR(100),
[事件内容]VARCHAR(100)
)
GO
INSERT INTO A
SELECT 'xg001','事件1' UNION ALL
SELECT 'xg002','事件2'
GO
IF(OBJECT_ID('B')IS NOT NULL)DROP TABLE B
GO
CREATE TABLE B
(
[事件ID] VARCHAR(100),
[每周进展情况] VARCHAR(800)
)
GO
INSERT INTO B
SELECT 'xg001','第1周打扫' UNION ALL
SELECT 'xg002','第1周开始' UNION ALL
SELECT 'xg001','第2周整理' UNION ALL
SELECT 'xg001','第3周完成'
SELECT A.[事件ID],A.[事件内容],MAX(B.[每周进展情况])as ' 每周进展情况(最新)'
FROM A INNER JOIN B ON A.[事件ID] =B.[事件ID]
GROUP BY A.[事件ID],A.[事件内容]
GO
CREATE TABLE A
(
[事件ID] VARCHAR(100),
[事件内容]VARCHAR(100)
)
GO
INSERT INTO A
SELECT 'xg001','事件1' UNION ALL
SELECT 'xg002','事件2'
GO
IF(OBJECT_ID('B')IS NOT NULL)DROP TABLE B
GO
CREATE TABLE B
(
[事件ID] VARCHAR(100),
[每周进展情况] VARCHAR(800)
)
GO
INSERT INTO B
SELECT 'xg001','第1周打扫' UNION ALL
SELECT 'xg002','第1周开始' UNION ALL
SELECT 'xg001','第2周整理' UNION ALL
SELECT 'xg001','第3周完成'
SELECT A.[事件ID],A.[事件内容],MAX(B.[每周进展情况])as ' 每周进展情况(最新)'
FROM A INNER JOIN B ON A.[事件ID] =B.[事件ID]
GROUP BY A.[事件ID],A.[事件内容]