1

読んでくれてありがとう、

私は次の表を持っています(表示)

#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

基本的に、学校図書館のローンログの私の小さなアプリケーションをモデル化したものを作成しました。

次のようなSQLステートメントを作成する方法を見つけようとしています:id_internalフィールド(図に表示)に基づいて一度に2行を結合します(最初の2行-タプルが存在しないかそこに存在するまでさらに2行など)最後に1つだけです)、もう1つの列を持つ新しいものを作成します。

これは、セットの1行(タイプ= 1)が、本の貸し出し、つまり、本がいつ貸し出され、いつ図書館に返却されることになっていたかを示しているということです。2番目の行(常にLoan_Dateとして時刻0000:00:00、フィールドタイプ= 0)は、本が返却された実際の日付を示します。新しい行には、最初の行に含まれるすべての情報が含まれ、新しい列として、本の実際の返却日が表示されます。Book_IDとLoan_person_id(本を借りた読者用)とTYPEの列があり、値は0(return)と1(loan)です。

SQLの基本的な能力から初期の中間的な能力まで、GROUPBYとGROUPCONCATを正しく使用できません。答えや方向性を楽しみにしています。
どうもありがとう、ディノス

編集:結果は次の形式である必要があります(ビューを使用しましょう)

処理前:
#id_internaltypeBOOK_IDライタータイトルLoan_person_idLoan_DateReturn_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
処理後:
2つのid_internalのいずれかを保持します(関係ありません):
#id_internaltypeBOOK_IDライタータイトルLoan_person_idLoan_DateReturn_Date Real_Return_Date
    120 1 1002 Writer1 Book1 2 2012-05-21 2012-06-04 2012-05-21


どうもありがとう

4

1 に答える 1

0

すべての本のローン(タイプ= 1)が必要であると想定しているため、ID120と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でははるかに複雑になります。

于 2012-12-24T18:29:11.313 に答える