2012-12-24 97 views
1

閱讀非常感謝,Mysql的基礎上連續鍵值合併行,然後合併

我有如下表(圖)

#id_internal type BOOK_ID  Writer  Title  Loan_person_id Loan_Date  Return_Date 
    120  1  1002 Writer1   Book1  2   2012-05-21  2012-06-04 
    131  0  1002 Writer1   Book1  2   0000-00-00  2012-05-21 
    134  0  1002 Writer1   Book1  2   0000-00-00  2012-05-21 
    153  1  1002 Writer1   Book1  2   2012-05-21  2012-06-04 
    162  0  1002 Writer1   Book1  2   0000-00-00  2012-05-21 
    165  1  1002 Writer1   Book1  2   2012-05-21  2012-06-04 
    252  1  1012 Writer2   Book2  2   2012-05-23  2012-06-06 
    253  0  1012 Writer2   Book2  2   0000-00-00  2012-05-23 
    383  1  1012 Writer2   Book2  2   2012-05-23  2012-06-06 
    389  0  1012 Writer2   Book2  2   0000-00-00  2012-05-24 
    13  1  1008 Writer3   Book3  3   2012-05-20  2012-06-03 
創建

基本上機型我的小APPLICA!重刑學校圖書館借閱日誌。

我想找出一種方法來創建一個sql語句,將執行以下操作:基於id_internal字段(顯示在圖片中)一次合併兩行(前兩行 - 更多兩個等,直到沒有元組存在或者最後只有一個元組),並創建一個具有更多列的新元組。

這是關於什麼的是,該集合中的一行(type = 1)描述了借書借貸,即書借出的時間和應該返還給圖書館的時間。第二行(總是Loan_Date的時間爲0000:00:00,字段類型= 0)描述了該書返回的真實日期。新行將包含在第一行中的所有信息以及作爲新列的書的真實返回日期。對於Book_ID和Loan_person_id(對於借閱本書的讀者)和TYPE分別具有值0(返回)和1(貸款)的列。

從SQL的基本到早期的中級能力,我無法正確使用GROUP BY和GROUP CONCAT。 期待解答或指示。
再次感謝, 迪諾斯

編輯:結果應該是在形式(讓我們用一個視圖)

 
Before Processing: 
#id_internal type BOOK_ID  Writer  Title  Loan_person_id Loan_Date  Return_Date 
    120  1  1002 Writer1   Book1  2   2012-05-21  2012-06-04 
    131  0  1002 Writer1   Book1  2   0000-00-00  2012-05-21 
After processing : 
Keep one of two id_internal (does not matter): 
#id_internal type BOOK_ID  Writer  Title  Loan_person_id Loan_Date  Return_Date Real_Return_Date 
    120  1  1002 Writer1   Book1  2   2012-05-21  2012-06-04  2012-05-21 


非常感謝

+0

我建議發佈有問題的SQL。這將有助於明確你所做的錯誤比所有這些文字更好。 – duffymo

+0

對不起,我沒有被允許發佈圖片,因爲我認爲。我用文字代替。非常感謝您的閱讀。 –

+0

不是表格;你嘗試過的SQL。 – duffymo

回答

0

我假設你希望所有的書貸款(類型= 1),所以標識120和153應該是分開的行。

下面的查詢需要發生的書的最低貸款日期之後給定的貸款:

select t.*, 
     (select min(ReturnDate) from t t2 where t.bookid = t2.bookid and t2.id > t.id and t2.type = 0) as ReturnDate 
from t 
where type = 1 

這適用於你的數據,因爲131和134具有相同的日期。在下一筆貸款之前獲取最大日期在MySQL中會更加複雜。

+0

它的工作原理!許多非常感謝(尊重!)。我認爲它會在sql語句長度中得到更多的擴展。 –

+0

如果在心情下降線來解釋「從t t2」。它是一個什麼樣的連接? –

+0

'select'子句中的子查詢是一個相關的子查詢。 't2'是用於區分子查詢中的「t」和外部查詢中的「t」的別名。連接條件使用兩者。我不是select子句中相關子查詢的忠實粉絲,但是在MySQL中,這通常是完成所需工作的唯一方法。 –