【问题标题】:Date Calcs , possible use of partition/row functions日期计算,可能使用分区/行函数
【发布时间】:2018-10-04 20:26:22
【问题描述】:

我有一个包含发票级别数据的表格,并且我有一个业务请求来创建一个包含要奖励给销售代表的新业务美元的表格。

逻辑如下:

  1. 如果在过去 6 个月内没有向该客户进行任何销售,或者如果该客户是新客户(表中不存在),则将销售计为“新业务”。
  2. 新业务信用将在首次符合条件的“新业务”销售后的 3 个月内持续。

表结构(为简单起见)

 Customer # - Invoice # - Invoice Dt - Total $$

听起来很简单,但我在用 sql 构建它时遇到了一些麻烦。有什么想法吗?

【问题讨论】:

  • “我在用 sql 构建它时遇到了一些麻烦” 这意味着您尝试了任何方法。请出示您尝试过的证据。除了得出更相关的答案外,它还表明您已经付出了努力。您还应该显示表结构、示例输入数据和所需的输出数据。请不要指望人们猜测。
  • 样本数据最好使用DDL + DML。请edit您的问题包括它,您当前的尝试和您想要的结果。
  • “创建表”在这里没有任何意义。你是说风景吗?
  • 请编辑您的问题并显示您想要的结果。这还不清楚。

标签: sql if-statement case teradata


【解决方案1】:

一步一步来

以前的客户(超过 3 个月但不到 6 个月)

 SELECT CustomerNo
 FROM TABLE_NAME_YOU_DID_NOT_TELL_US
 WHERE InvoiceDt > CURRENT_DATE - 6 MONTHS -- newer than 6 months
   AND InvoiceDt < CURRENT_DATE - 3 MONTHS -- older than 3 months

现在取过去 3 个月中不包括那些的所有内容

 CREATE VIEW NEW_CUSTOMERS AS 

 SELECT *
 FROM TABLE_NAME_YOU_DID_NOT_TELL_US
 WHERE InvoiceDt > CURRENT_DATE - 3 MONTHS -- newer than 3 months
  AND CustomerNo NOT IN (
   SELECT CustomerNo
   FROM TABLE_NAME_YOU_DID_NOT_TELL_US
   WHERE InvoiceDt > CURRENT_DATE - 6 MONTHS -- newer than 6 months
     AND InvoiceDt < CURRENT_DATE - 3 MONTHS -- older than 3 months
 )

您也可以通过加入来做到这一点。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-27
    相关资源
    最近更新 更多