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 字段(如图所示)一次合并两行(前两行 - 更多两行等,直到不存在元组或存在最后只有一个)并创建一个多列的新列。

这就是所有关于集合中的一行(type = 1)描述图书借出的时间,即图书被借出的时间以及应该归还图书馆的时间。第二行(始终具有 Loan_Date 时间 0000:00:00 和字段 type = 0 )描述了还书的真实日期。新行将包含第一行中包含的所有信息,新列将包含图书的真实归还日期。Book_ID 和 Loan_person_id 列(用于借书的读者)和 TYPE 列,值为 0(返回)和 1(贷款)。

从我在 SQL 中的基本能力到早期中级能力,我无法正确使用 GROUP BY 和 GROUP CONCAT。期待答案或方向。
非常感谢,迪诺斯

编辑:结果应该是形式(让我们使用视图)

处理前:
#id_internal type BOOK_ID Writer Title Loan_person_id Loan_Date Return_Date
    120 1 1002 作家1 Book1 2 2012-05-21 2012-06-04
    131 0 1002 Writer1 Book1 2 0000-00-00 2012-05-21
处理后:
保留两个 id_internal 之一(没关系):
#id_internal type BOOK_ID Writer Title Loan_person_id Loan_Date Return_Date Real_Return_Date
    120 1 1002 作家1 Book1 2 2012-05-21 2012-06-04 2012-05-21


非常感谢

4

1 回答 1

0

我假设您想要所有图书贷款(类型 = 1),因此 ids 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 中获得下一次贷款之前的最长日期会复杂得多。

于 2012-12-24T18:29:11.313 回答