需要帮助SQL SELECT查询了这种双表格

问题描述:

表捕捉图像:http://img844.imageshack.us/img844/6213/99730337.jpg需要帮助SQL SELECT查询了这种双表格

------------ 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。在ContentTablo

1,2,3)

随着PositionTable.ContentFK = ContentTable.ContentID 按上次更新的UpdateDate:但是,组数由ASC位置(位置只列出一个记录 (订单。

我怎样才能获得列表相同的结果

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 

感谢所有,

这应做到:

编辑:原来的代码是因为我认为你的日期是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 
+0

+1 - 当日的好消息 - 我原以为MM.DD.YYYY也是。假设它是一个字符串,你不能只在UpdateDate上做一个MAX,这就是你所描述的。 – LittleBobbyTables 2010-10-07 16:47:40

+0

谢谢。我想给出一个完整的结果。 – user469272 2010-10-07 17:16:23

+0

更新日期类型:SmallDateTime – user469272 2010-10-07 17:23:55

子查询有点难看(和相关),但这是我能想到的最简单的方法。

假设你UpdateDate列是DATETIME - 否则,你将不得不做一些像乔做了(或更好,改列到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 
+0

只是注意到我自己,并据此编辑。 – 2010-10-07 16:51:30

+0

感谢它的工作。 UpdateDate类型:SmallDateTime – user469272 2010-10-07 17:26:19

尝试:

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 
+0

如果Google的日期为'12 .11.2010',该怎么办? – LittleBobbyTables 2010-10-07 16:48:54

+0

我假设它是一个日期时间字段在这里,并且狡猾的字符串格式是一个单独的问题。当然应该是YYYYMMDD是完全安全的。 – MLT 2010-10-07 16:51:42

+0

返回错误:无效的对象名称'位置'。我无法修复它 – user469272 2010-10-07 17:20:33