【问题标题】:Select min difference of timestamp if it occurred after another timestamp如果它发生在另一个时间戳之后,则选择时间戳的最小差异
【发布时间】:2014-10-08 12:47:33
【问题描述】:

我有一个表格,其中显示了customer_idproduct_idbrowse_datepurchase_date,以及浏览日期和购买日期之间的差异。它看起来像这样。

id  pID  b_Date     p_Date       Diff
1   001  7/20/2014  7/20/2014    0
1   001  7/20/2014  7/20/2014    0
1   002  7/20/2014  7/20/2014    0
2   001  7/20/2014  7/20/2014    0
2   001  7/20/2014  8/01/2014    -12
2   002  7/25/2014  8/01/2014    -8
2   002  7/26/2014  8/01/2014    -7
2   002  7/28/2014  8/01/2014    -5
2   002  7/28/2014  8/01/2014    -5

我试图找出客户在购买前提前多少天开始浏览特定产品。

但是,对于客户 2,他进行了两次购买。现在,他在 2014 年 7 月 20 日进行的浏览不应算作他在 2014 年 8 月 1 日进行的购买浏览,因为这与 7/20 的购买有关。

我想知道如何获得在最后一次购买后发生浏览的每个客户的 MIN Diff。另外,我不能在查询中使用 pID(产品 ID)。

我使用的是 teradata 13.1

【问题讨论】:

    标签: sql teradata


    【解决方案1】:

    您的问题对我来说有点含糊,但我认为您是说您希望客户id 的给定购买的最低diffpID 无关。这是完成该任务的检查和后续查询。

    以下是根据您提供的数据集得出的结果:

    id  Max_b_Date  p_Date      Min_Diff
    1   2014-07-20  2014-07-20      0
    2   2014-07-20  2014-07-20      0
    2   2014-07-28  2014-08-01      -5
    

    以及我用来在 Teradata 13.1 中重新创建您的问题的代码

    CREATE MULTISET TABLE danf.table1
        (
        id INTEGER NOT NULL,
        pID VARCHAR(50) CHARACTER SET LATIN NOT CASESPECIFIC,
        b_Date DATE FORMAT 'MM/DD/YYYY' ,
        p_Date DATE FORMAT 'MM/DD/YYYY' ,
        Diff INTEGER 
        )
    PRIMARY INDEX ( id );
    
    INSERT INTO danf.table1 (id, pID, b_Date, p_Date, Diff) VALUES ( 1, '001', CAST('07/20/2014' AS DATE FORMAT 'MM/DD/YYYY'), CAST('07/20/2014' AS DATE FORMAT 'MM/DD/YYYY'), 0 );
    INSERT INTO danf.table1 (id, pID, b_Date, p_Date, Diff) VALUES ( 1, '001', CAST('07/20/2014' AS DATE FORMAT 'MM/DD/YYYY'), CAST('07/20/2014' AS DATE FORMAT 'MM/DD/YYYY'), 0 );
    INSERT INTO danf.table1 (id, pID, b_Date, p_Date, Diff) VALUES ( 1, '002', CAST('07/20/2014' AS DATE FORMAT 'MM/DD/YYYY'), CAST('07/20/2014' AS DATE FORMAT 'MM/DD/YYYY'), 0 );
    INSERT INTO danf.table1 (id, pID, b_Date, p_Date, Diff) VALUES ( 2, '001', CAST('07/20/2014' AS DATE FORMAT 'MM/DD/YYYY'), CAST('07/20/2014' AS DATE FORMAT 'MM/DD/YYYY'), 0 );
    INSERT INTO danf.table1 (id, pID, b_Date, p_Date, Diff) VALUES ( 2, '001', CAST('07/20/2014' AS DATE FORMAT 'MM/DD/YYYY'), CAST('08/01/2014' AS DATE FORMAT 'MM/DD/YYYY'), -12 );
    INSERT INTO danf.table1 (id, pID, b_Date, p_Date, Diff) VALUES ( 2, '002', CAST('07/25/2014' AS DATE FORMAT 'MM/DD/YYYY'), CAST('08/01/2014' AS DATE FORMAT 'MM/DD/YYYY'), -8 );
    INSERT INTO danf.table1 (id, pID, b_Date, p_Date, Diff) VALUES ( 2, '002', CAST('07/26/2014' AS DATE FORMAT 'MM/DD/YYYY'), CAST('08/01/2014' AS DATE FORMAT 'MM/DD/YYYY'), -7 );
    INSERT INTO danf.table1 (id, pID, b_Date, p_Date, Diff) VALUES ( 2, '002', CAST('07/28/2014' AS DATE FORMAT 'MM/DD/YYYY'), CAST('08/01/2014' AS DATE FORMAT 'MM/DD/YYYY'), -5 );
    INSERT INTO danf.table1 (id, pID, b_Date, p_Date, Diff) VALUES ( 2, '002', CAST('07/28/2014' AS DATE FORMAT 'MM/DD/YYYY'), CAST('08/01/2014' AS DATE FORMAT 'MM/DD/YYYY'), -5 );
    
    SELECT 
        t1.id
        ,MAX(b_Date) AS Max_b_Date
        ,t1.p_Date
        ,MAX(t1.Diff) AS Min_Diff
    FROM danf.table1 t1
    GROUP BY 
        t1.id, 
        t1.p_Date;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 2014-05-04
      • 2019-05-06
      • 2018-07-25
      相关资源
      最近更新 更多