※ 引述《msplay (Hello Moto)》之銘言:
: 小弟想這問題已經兩天了,想出直接用SQL語法組出來,
: 不然就得用程式去跑了。
: 假設目前有兩個Table,Table1、Table2
: Table1存的是員工的升遷歷史,如部門、升遷的日期
: PK:ID+DEPID(部門ID)+UPDATE(升遷日期)
: Table2存的是員工的加班資料,員工ID、加班的時間
: PK:ID+PLUSDATE
: 問題為:找到某員工在某日加班的時候,所在的部門為何?
: 看似簡單的問題,但是
table存什麼?假設是員工資料?PK應該有個員工編號…?假設是id
以下想法純粹從語義翻成SQL。
: 第一:升遷的日期與加班的時間並不會相同。
但兩個時間還是有關係的吧,「加班時間」在「任現職等日」跟「升遷日」之間
: 第二:加班的日期會有很多筆、升遷的日期也會有很多筆
肯定是唯一的「員工」吧
所以 SQL至少要有table1.id=table2.id
select *
from table
left join table1 on table.id=table1.id
left join table2 on table.id=table2.id
and table2.加班日 between table1.現職 and 升遷日
如果沒有任現職等日,用 table1 self join應該串的出來....應該
噗,這篇文章充滿假設,實際跑應該還有很多地方要改。
但感覺在這三張表找關聯這個方向值得思考。
: 目前我的寫法是:
: SELECT A.ID, A.PLUSDATE B.DEPID
: FROM TABLE1 A
: LEFT JOIN
: (SELECT ID, PLUSDATE FROM TABLE2 WHERE ID='12345678'
: ORDER BY PLUSDATE DESC FETCH FIRST 1 ROWS ONLY)B
: ON A.UPDATE<B.PLUSDATE
: -------------------------------------------------------------
: 這樣寫只能把最近一筆加班與部門JOIN
: 但如果某人在A部門加完2次班後,後來調至B部門加了3次班
: 如何能夠把某員工在某時間內加班的時間與所屬部門「全部」SELECT出來
: SQL語法是否做的到呢?
: 謝謝各位高手看完小弟問題!!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.209.221