非常感谢阅读,
我有下表(查看)
#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字段(如图所示)一次组合两行(前两行 - 更多两行等,直到没有元组存在或最后只有一个)并创建一个新的一列。
这就是该集合的一行(类型= 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 :(得分:0)
我假设您想要所有图书贷款(类型= 1),因此ID 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中获得下一次贷款之前的最大日期将会复杂得多。