2011-12-05 66 views
0

試圖想想如何概括我的問題,只是想不到的東西(這也許是爲什麼我googling沒有提供解決方案呢)。SQL獲取每個用戶的最新記錄

所以我把我的問題在users表和comments表而言,我想要得到的最近評論爲每個用戶

USERS

| ID | NAME | 
------------- 
| 01 | BOB | 
------------- 
| 02 | JEN | 
------------- 

評論

| EMP_ID | UPDATED | 
----------------------- 
| 01  | 12/05/2011 | <== I WANT THIS 
----------------------- 
| 01  | 11/29/2011 | 
----------------------- 
| 02  | 12/01/2011 | <== ...AND THIS 
----------------------- 
| 02  | 11/27/2011 | 

我已經試過這樣的事情...

select e.date from USERS u 
join EMPLOYEES e on e.emp_id=u.id 
where emp_id in (select emp_id from TIMESHEETS where emp_id=u.id order by date fetch first 1 row only) 

...它可以工作,但速度非常慢。

(我們正在使用DB2,所以我有共同的表在我們的處置)

+0

如果您發佈的代碼,XML或數據樣本,**請**突出顯示文本編輯器的線和編輯器工具欄上的「代碼示例」按鈕('{}')點擊很好的格式和語法高亮它!的 –

+2

可能重複[SQL - 選擇「否」組最大的元素(http://stackoverflow.com/questions/7538725/sql-select-n-greatest-elements-in-group) –

回答

1
select u.name 
    , u.id 
    , c.text 
    , c.updated 
    from users u 
left 
    join (select cm.emp_id 
       , max(cm.updated) mostRecentCommentDate 
      from comments cm 
      group 
      by cm.emp_id) recentComments 
    on recentComments.emp_id = u.id 
left 
    join comments c 
    on c.emp_id = u.id 
    and c.updated = recentComments.mostRecentCommentDate 

一個潛在的問題是在這裏當用戶對同一天thier最近的評論不止一個註釋。它可以解決,但您需要提供如何確定所需行的標準。以上查詢將針對最新評論日期的每條評論提供一行。太糟糕了,它不是一個時間字段...

+0

克里斯感謝 - 我會看看這個。 (我的用戶/評論的事情是真實的情況simplfication - 在現實中我處理的時間字段),我要讓你知道如何去。 – blogofsongs

0

再次感謝克里斯 - 我認爲你的方法,但最終我以我把我原來的SQL的形式給出看了一遍。我的問題中包含的SQL大大簡化了。實際上,我有三個連接,並且在where子句中相當大。

我發現相關的子查詢方法實際上是非常快的,當我仔細查看where子句時,並且當我確定子查詢與外部查詢相關時,它在結果集上這樣做是通過過濾大大減少。

相關問題