这是我拥有的表格,我尝试通过左连接和分组以最小差异连接同一张表之间的几天。我没有那么成功。
Customer|Order|Date
1 | 1 |Date1
1 | 2 |Date2
1 | 3 |Date3
1 | 4 |Date4
2 | 1 |Date1
2 | 2 |Date3
2 | 3 |Date6
3 | 1 |Date3
3 | 2 |Date5
必需的是:
Customer|Order|Date |diff
1 | 1 |Date1| 0
1 | 2 |Date2| days_betwen(Date2, Date1)
1 | 3 |Date3| days_betwen(Date3, Date2)
1 | 4 |Date4| days_betwen(Date4, Date3)
2 | 1 |Date1| 0
2 | 2 |Date3| days_betwen(Date3, Date1)
2 | 3 |Date6| days_betwen(Date6, Date3)
3 | 1 |Date3| 0
3 | 2 |Date5| days_betwen(Date5, Date3)
我需要逻辑部分的建议!
编辑:如果订单号不连续怎么办?
最佳答案
首先,您需要通过 Customer
和 Order
字段将表连接到自身。然后使用 DATEDIFF()获取两个日期之间天数的函数。
如果
Order
列按顺序编号,那么解决方案最简单:SELECT cur.`Customer` AS `Customer`, cur.`Order` AS `Order`, cur.`Date` AS `Date`, DATEDIFF(cur.`Date`, IFNULL(prv.`Date`, cur.`Date`)) AS `DaysPassed` FROM MyTable cur LEFT JOIN MyTable prv ON cur.`Customer` = prv.`Customer` AND cur.`Order` = prv.`Order`+ 1;
如果
Order
列没有按顺序编号,但下一个Order
值大于上一个,那么您可以使用大于 或小于 运算符。使用GROUP BY
子句和聚合函数为每个订单返回单行。注意,可能会很长!SELECT comb.`Customer` AS `Customer`, comb.`curOrder` AS `Order`, comb.`curDate` AS `Date`, DATEDIFF(comb.`curDate`, IFNULL(pr.`Date`, comb.`curDate`)) AS `DaysPassed` FROM (SELECT cur.`Customer` AS `Customer`, cur.`Order` AS curOrder, cur.`curDate` AS `Date`, max(prv.`Order`) AS `prvOrder` FROM MyTable cur LEFT JOIN MyTable prv ON cur.`Customer` = prv.`Customer` AND cur.`Order` > prv.`Order` GROUP BY cur.`Order`, cur.`Customer`) comb LEFT JOIN MyTable pr ON pr.`Customer` = comb.`Customer` AND pr.`Order` = comb.prvOrder;
如果您使用随机订单号,则可以在
comb
子查询中使用Date
列而不是Order
来按同一客户最近的订单日期加入记录。
祝你好运!
关于mysql - SAP HANA : days between two Orders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461440/