資料庫中表自連接,如何獲取時間列中小於自身的最大時間呢?

在數據表的處理上,遇到了一些問題,自己研究了幾天也想不出辦法,所以想來請教一下大家,User_ID是使用者的ID,Machine_Num是機器的編號,一台機器在一個時間段內只能有一個人使用,Finish_Date是換機器的日期,現在想輸出機器的使用時間段,數據的Start_Date是日期小於該行Finish_Date之前最大的一個,希望可以得到解答,先謝謝大家

---------------------------------分割線------------------------------------------------

感謝各位,作為一個常年潛水的小白,收到各位的解答真的很開心,渣渣題主會加油的,再次謝謝各位~~


max min嘛,這種東西寫個子查詢就好了。


如果你用的是sqlserver,那直接按照MachineNum和FinishDate排序,然後寫個while循環(用T-SQL和cursor來寫),輕鬆搞定StartDate。


MySQL:

UPDATE tbl_1 a,
(
SELECT a.UserID, a.Machine_Num, MAX(b.Finish_Date) AS Start_Date, a.Finish_Date
FROM tbl_1 a
JOIN tbl_1 b ON a.Machine_Num = b.Machine_Num AND a.Finish_Date &> b.Finish_Date
GROUP BY a.UserID, a.Machine_Num, a.Finish_Date
) AS s
SET a.Start_Date = s.Start_Date
WHERE a.UserID = s.UserID AND a.Machine_Num = s.Machine_Num AND a.Finish_Date = s.Finish_Date


用with語句和row_number分分鐘搞定


語文要學好,不要有錯別字,語句要寫通順。差一點可以用輪子的油膘,其次就上子查詢,或者用max耍耍(噓,一般人我不告訴他


推薦閱讀:

求教SQL面試題目:單張表查詢某欄位排在第二或第n-1問題?
像Mysql和SQL Server這類資料庫都有相應的圖形化管理工具,例如phpmyadmin等。除了更能全面了解資料庫信息和操作簡便之外,圖形化工具還有什麼不易被人發現的好處?
資料庫預編譯為何能防止SQL注入?
連續簽到獎勵 資料庫如何設計?
怎麼樣從 web 開發人員轉成 DBA ?

TAG:資料庫 | SQL | MySQL | 甲骨文Oracle | MicrosoftSQLServer |