表捕获图像:http://img844.imageshack.us/img844/6213/99730337.jpg
------------ PositionTable------------
ID ContentFK Position
11 100 1
12 101 1
13 104 2
14 102 2
15 103 2
16 105 3
17 106 3
18 107 2
----------Content Table ------------
ContentID UpdateDate Title
100 11.10.2009 Aol
101 12.10.2009 Microsoft
102 12.10.2009 e-Bay
103 12.11.2009 google
104 16.11.2009 novell
105 17.11.2009 asus
106 16.11.2009 nokia
107 11.11.2009 samsung
谁能帮助我解决两个表之间的问题 我的情景。
按编号排序为位置1,2,3。但是,许多组只列出一条记录 (按职位ASC排序(职位:1,2,3)
使用PositionTable.ContentFK = ContentTable.ContentID 通过ContentTablo上次更新的UpdateDate
我如何获得与结果相同的列表。
p.Postion p.ID p.ContentFK c.UpdateDate c.Title
1 12 101 12.10.2009 Microsoft
2 13 104 16.11.2009 novell
3 16 105 17.11.2009 asus
全心全意,
答案 0 :(得分:2)
这应该这样做:
编辑:原始代码是因为我认为您的日期是MM.DD.YYYY。已实现您的日期为DD.MM.YYYY并相应调整了代码。
编辑2 :根据UpdateDate数据类型的反馈更改了答案。
;with cteMaxDate as (
select p.Position, MAX(c.UpdateDate) as MaxDate
from PositionTable p
inner join ContentTable c
on p.ContentFK = c.ContentID
group by p.Position
)
select p.Position, p.ID, p.ContentFK, c.UpdateDate, c.Title
from cteMaxDate m
inner join PositionTable p
on m.Position = p.Position
inner join ContentTable c
on p.ContentFK = c.ContentID
and m.MaxDate = c.UpdateDate
答案 1 :(得分:0)
子查询有点难看(并且相关),但这是我能想到的最简单的方法。
假设您的UpdateDate列是DATETIME - 否则您将不得不像Joe那样做(或者,更好的是,将列更改为DATETIME: - )
select p.Position
,p.ID
,p.ContentFK
,c.UpdateDate
,c.Title
from PositionTable p
join ContentTable c
on p.ContentFK = c.ContentID
and c.UpdateDate = (select max(ic.UpdateDate) from ContentTable ic
join PositionTable ip
on ip.ContentFK = ic.ContentID
where ip.Position = p.Position)
order by p.Position
答案 2 :(得分:0)
尝试:
select Position, ID, ContentFK, UpdateDate, Title
from (
select p.Position,
p.ID,
p.ContentFK,
c.UpdateDate,
c.Title,
row_number() over (partition by p.Position order by p.Position, c.UpdateDate desc) as num
from Position p inner join
Content c on p.ContentFK = c.ContentId ) a
where num = 1