2013-02-20 34 views
0

我在我的數據庫,該數據庫是使用提取在一個表中只有一個數據選擇

表1(用戶)
用戶ID(PK)
EmployeeName

表2(SubDept)
3個表SubDeptID(PK)

表3(SubDeptTransfer)
TransferID(PK)
用戶ID(FK)
SubDeptID(FK)

這裏是我的表例如表3

enter image description here
我想要做的是能夠打印100的用戶的SubDeptID的問題是因爲它有兩個用於打印的100個用戶。任務是能夠使用後面的TransferID打印只有一個數據。什麼可能是這個問題最好的選擇聲明?

+0

重新加標籤,因爲你的問題是關於一個SQL語句,不PHP。您可能正在使用PHP實現它,但是您的問題從未提及過,並且與回答問題無關。什麼樣的SQL可能是(MySql,Oracle等),你可能想把這些信息添加到你的問題中併爲它添加一個標籤。 – 2013-02-20 02:16:43

+0

謝謝你這樣做 – Yinks 2013-02-20 02:31:59

回答

2

要做到這一點,最好的辦法是使用窗口函數row_number()

select transferId, userId, subDeptId 
from (select t.*, 
      row_number() over (partition by userid order by TransferId desc) as seqnum 
     from t 
    ) t 
where seqnum = 1 
+0

Gordon,你能解釋爲什麼這種方法比簡單的更像「SELECT transferId,userId,subDeptId FROM SubDeptTransfer WHERE subDeptId = 100 ORDER BY transferId DESC LIMIT 1嗎?我只是有興趣瞭解什麼時候有興趣以及爲什麼使用這種分區方案會比一個命令和限制更快 – 2013-02-20 02:26:14

+0

啊,沒關係,不同之處在於你正確地理解了要求的內容,這個程序中的 – 2013-02-20 03:52:32

2

我會做它像這樣:

SELECT subDeptId FROM SubDeptTransfer WHERE userId = 100 ORDER BY transferId DESC LIMIT 1 
+0

只是指用戶標識符100但總的來說,如果這些用戶標識與101相同,我怎麼能概括它呢?或者不僅僅是用戶標識100? – Yinks 2013-02-20 03:43:53

+0

你是什麼意思,一般來說?我的理解是,你想返回給定用戶標識的subDeptId在你的查詢中替換你想要的100個用戶標識,你將得到匹配的subDeptId最高TransferId。你是說你想讓結果對每個userId都有一行嗎?如果是這樣,我希望Gordon Linoff的解決方案能夠發揮作用。 – 2013-02-20 03:47:51

+0

謝謝。我嘗試使用戈登先生給出的,現在可以正常工作了,謝謝! – Yinks 2013-02-20 04:47:03

相關問題