Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 如果发生在另一个时间戳之后,请选择时间戳的最小差值_Sql_Teradata - Fatal编程技术网

Sql 如果发生在另一个时间戳之后,请选择时间戳的最小差值

Sql 如果发生在另一个时间戳之后,请选择时间戳的最小差值,sql,teradata,Sql,Teradata,我有一个表格,显示客户id,产品id,浏览日期,购买日期,以及浏览日期和购买日期之间的差异。看起来像这样 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

我有一个表格,显示
客户id
产品id
浏览日期
购买日期
,以及浏览日期和购买日期之间的差异。看起来像这样

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日的购买有关

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


我使用的是teradata 13.1

您的问题对我来说有点模糊,但我认为您是在说,您希望客户
id
购买给定产品时,无论
pID
如何,都能获得最低的
diff
。下面是完成该操作的准备和后续查询

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;
以下是基于您提供的数据集的结果:

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;