2010-10-07 24 views
1

表捕捉圖像: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 

感謝所有,

回答

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

0

子查詢有點難看(和相關),但這是我能想到的最簡單的方法。

假設你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

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