看板 Database 關於我們 聯絡資訊
※ 引述《JYHuang (夏天到了,冷不起來了說)》之銘言: : 抱歉,想了一整天的條件想到頭昏了 XD : 發問時把自己想要的條件都弄混了 : 不過現在被要求把兩個條件分開寫 : 又碰到了另一個問題 : 刷卡資料 TABLE "AA" : A01(工號),A02(日期),A03(時間),A04(上/下班) : 001 20091120 0900 A : 001 20091120 1700 B : 001 20091121 0901 A : 001 20091121 1701 A : 這是個上班遲到的檢核程式,我要撈出刷卡資料並比對請假資料。 : SELECT * FROM AA : LEFT JOIN BB (請假資料) : ... : WHERE A04='A' AND A03 > '0900' : 因為可能會因為刷錯上下班(像是第四筆),而造成誤判 : 所以要跟自己比對A03 = 是當日A03最小 : 能不能在不用GROUP的情形下(因為要合併好幾個table) : 準確的撈出A04為當日最小的一筆呢? : 加個 WHERE A04=(subquery) 好像又會把範圍做小了.. : 或是該怎麼做GROUP?
JYHuang:ㄜ....試出答案了...只是跟原先想的走不同的方向...11/21 23:54
adrianshum:AA, BB, A01, A02. 你不能寫得易讀一點才發問嗎? orz11/23 11:35
DataBase版推文限制限好久 ="= ERP系統裡的TABLE name命名本來就沒那麼直覺了 如果不精簡一點而照schema打的話,落落長一篇反而不好抓問題吧 -- 原本我是以刷卡資料(AMSMC)為主table 人事資料(CMSMV) Join進來,然後遇到上面刷卡資料重複的一些問題。 現在改成這樣的架構 人事資料(CMSMV) 刷卡資料(AMSMC) 請假資料(PALTF) MV001 工號 MC001 工號 TF001 工號 MV002 姓名 MC002 日期 TF002 日期 MC003 時間 TF011 核準 MC007 上下班 SELECT * FROM CMSMV LEFT OUTER JOIN (SELECT MC001,MC002,Min(MC003) as MC003,MC007 FROM AMSMC GROUP BY MC001,MC002,MC007 HAVING MC007='上班' ) AS B ON MV001 = B.MC001 LEFT JOIN PALTF ON TF001 = MV001 LEFT JOIN .... ON ... WHERE (ISNULL(TF011,'Y') = 'N') AND..... 先把刷卡資料做過濾再Join進來 才不用煩惱要怎麼做group... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.163.122