2014-02-25 65 views
0

我有3個表格。 1是FORUM,2是CURRENT,3是ARCHIVE。使用最新的記錄加入多個表格

  • FORUM包含用戶發表評論的論壇的元數據,每個論壇有一行。
  • CURRENT包含來自所有論壇的「當前」條目的元數據,每條記錄有1行。
  • ARCHIVE包含有關來自所有論壇的「已歸檔」條目的元數據,每個條目一行。

每個論壇可以在當前和ARCHIVE表條目。 CURRENT和ARCHIVE是相同的。

FORUM中感興趣的欄目爲FORUM_NAMEFORUM_NUMBER

CURRENT和ARCHIVE中感興趣的列是ENTRY_NUMBERFORUM_NUMBER,MOD_DATE

下面的查詢返回CURRENT表中具有行的每個論壇的最新MOD_DATE。

select max(c.mod_date), f.forum_name, f.forum__number 
from forum f, current c 
where f.forum_number=c.forum_number 
group by f.forum_name, f.forum_number order by max(c.mod_date) desc; 

如何配置這個查詢當前和存檔表,也不管哪個表具有最新的該論壇mod_date返回每個論壇的最近期mod_date?

謝謝。

回答

0

我會嘗試將兩個表查詢的聯合作爲內部選擇,然後在外部選擇中進行排序。 Imho這應該是可行的。

+0

感謝您的建議,但將是什麼樣子? – user3352599

0

另一個更好的方法來爲互聯網反規格化表格。我會添加兩列到您的論壇表中的LatestCurrent和LatestArchive。當條目被添加到每個相應的,有一個觸發器更新論壇表與最新日期的相應列。您甚至可能需要最新的current/archive的ID,以便您可以立即加入這些表,而無需每次都執行MAX()查詢。

現在,他這樣說,你會需要像

select 
     f.forum_name, 
     f.forum__number, 
     case when CurMax.maxCurrent >= ArchMax.maxArchive 
      then CurMax.maxCurrent 
      else ArchMax.maxArchive end as MaxDate, 
     case when CurMax.maxCurrent >= ArchMax.maxArchive 
      then "Current" 
      else "Archive" end as MaxSource 
    from 
     forum f 
     LEFT JOIN (select c.forum_number, 
          max(c.mod_date) maxCurrent 
         from current c 
         group by c.forum_number) CurMax 
      on f.forum_number = CurMax.forum_number 
     LEFT JOIN (select a.forum_number, 
          max(a.mod_date) maxArchive 
         from archive a 
         group by a.forum_number) ArchMax 
      on f.forum_number = ArchMax.forum_number 
    order by 
     CurMax.maxCurrent DESC 
+0

不幸的是,我沒有改變表格的選項。我必須與我所擁有的一起工作。謝謝。 – user3352599

+0

@ user3352599,這就是爲什麼我仍然提供您所擁有的查詢。 – DRapp

+0

對不起,並不意味着建議我不考慮您的查詢。只是指出我無法修改表格。我跑你的查詢,它幾乎讓我在那裏。它爲每個論壇返回一行,列的最大mod_date爲當前和歸檔。我需要更進一步,讓它告訴我最大mod_date時間段,無論它是當前還是歸檔,而不必手動查看兩列並確定哪一個更近。那有意義嗎?希望我充分解釋。再次,謝謝!這非常接近,並讓我走上了道路。 – user3352599

相關問題