mysql - SAP HANA : days between two Orders

标签 mysql sql hana

这是我拥有的表格,我尝试通过左连接和分组以最小差异连接同一张表之间的几天。我没有那么成功。

 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)

我需要逻辑部分的建议!

编辑:如果订单号不连续怎么办?

最佳答案

首先,您需要通过 CustomerOrder 字段将表连接到自身。然后使用 DATEDIFF()获取两个日期之间天数的函数。

  1. 如果 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;
    
  2. 如果 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;
    
  3. 如果您使用随机订单号,则可以在 comb 子查询中使用 Date 列而不是 Order 来按同一客户最近的订单日期加入记录。

祝你好运!

关于mysql - SAP HANA : days between two Orders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44461440/

相关文章:

java - 如何在 SAP HANA XS 项目中使用外部 jar 库

php - 将循环的 MySQL 数组存储为字符串变量

mysql - 计算每个唯一元素在 `select` 查询中出现的次数

mysql - 如何在MYSQL中选择一项,下一项和上一项

php - 如何将百分号添加到从sql查询输出的字符串值

mysql - sql查询计数连接中的记录数

sap - 在 CDS View 中连接空格

php - POS 的离线数据库支持

sql - SQL缺少运算符

hadoop - SAP Vora Thrift 服务器错误 : Instantiating dialect 'sapsql' failed