Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.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_Amazon Web Services_Amazon Redshift - Fatal编程技术网

Sql 获取下一个大于值的日期时间

Sql 获取下一个大于值的日期时间,sql,amazon-web-services,amazon-redshift,Sql,Amazon Web Services,Amazon Redshift,从表中获取同一类型的下一个可用时间,该时间大于该类型的可用拾取时间。我尝试使用第一个值函数,但似乎效果不好 DROP TABLE IF EXISTS Test1; CREATE TEMPORARY TABLE Test1 ( Type VARCHAR(50), Pickup_Time TIMESTAMP, INSERT_TIME TIMESTAMP ); DROP TABLE IF EXISTS Test2; CREATE TEMPORARY TA

从表中获取同一类型的下一个可用时间,该时间大于该类型的可用拾取时间。我尝试使用第一个值函数,但似乎效果不好

DROP TABLE IF EXISTS Test1;
CREATE TEMPORARY TABLE Test1
(
    Type        VARCHAR(50),
    Pickup_Time TIMESTAMP,
    INSERT_TIME      TIMESTAMP
);
DROP TABLE IF EXISTS Test2;
CREATE TEMPORARY TABLE Test2
(
    Type VARCHAR(50),
    TIMEFRAME  TIMESTAMP
);


INSERT INTO Test1
VALUES ('MAN', '2020-11-01 09:00:00.000000', '2020-11-01 06:00:00.000000');
INSERT INTO Test1
VALUES ('CAT', '2020-11-02 11:00:00.000000', '2020-11-02 05:00:00.000000');


INSERT INTO Test2
VALUES ('MAN', '2020-11-01 01:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 02:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 03:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 04:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 05:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 06:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 07:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 08:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 09:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 10:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 11:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 12:00:00.000000');
INSERT INTO Test2
VALUES ('MAN', '2020-11-01 13:00:00.000000');


INSERT INTO Test2
VALUES ('CAT', '2020-11-01 01:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-01 02:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-01 03:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-01 04:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-01 05:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-02 06:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-02 07:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-02 08:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-02 09:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-02 10:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-02 11:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-02 12:00:00.000000');
INSERT INTO Test2
VALUES ('CAT', '2020-11-02 13:00:00.000000');


SELECT DISTINCT TT.*,
                FIRST_VALUE(CT.TIMEFRAME)
                OVER (PARTITION BY TT.Type ORDER BY TIMEFRAME rows between unbounded preceding and unbounded following)
FROM Test1 TT
         INNER JOIN Test2 CT on TT.Type = CT.Type
    AND TT.Pickup_Time < CT.TIMEFRAME;
但是,当我用不同的时间为类型MAN执行另一次插入并尝试运行相同的SQL语句时,它不符合我的条件

INSERT INTO Test1
VALUES ('MAN', '2020-11-01 03:00:00.000000', '2020-11-01 01:00:00.000000');



+----+--------------------------+--------------------------+--------------------------+
|type|pickup_time               |insert_time               |first_value               |
+----+--------------------------+--------------------------+--------------------------+
|MAN |2020-11-01 03:00:00.000000|2020-11-01 01:00:00.000000|2020-11-01 04:00:00.000000|
|MAN |2020-11-01 09:00:00.000000|2020-11-01 06:00:00.000000|2020-11-01 04:00:00.000000|
|CAT |2020-11-02 11:00:00.000000|2020-11-02 05:00:00.000000|2020-11-02 12:00:00.000000|
+----+--------------------------+--------------------------+--------------------------+
对于上述第二个人工输入,该值应为2020-11-01 10:00:00.000000,而不是2020-11-01 04:00:00.000000


如果是,这里使用的第一个值是正确的选项吗?如果是,如何导出逻辑,或者哪一个是可以用来实现这一点的最佳函数。

发生错误的原因是,对于
MAN
有两个条目,但您只需按
类型划分,因此两个条目的处理方式相同,您需要按
拾取时间
插入时间
进行分区:

FIRST_值(连续时间)
OVER(按TT.Type划分,按TT.picku时间顺序划分,按无界前后行之间的时间帧行划分)
这将产生:


type    pickup_time insert_time first_value
MAN 2020-11-01 03:00:00 2020-11-01 01:00:00 2020-11-01 04:00:00
CAT 2020-11-02 11:00:00 2020-11-02 05:00:00 2020-11-02 12:00:00
MAN 2020-11-01 09:00:00 2020-11-01 06:00:00 2020-11-01 10:00:00

非常感谢Philipp,很抱歉延迟了响应,我正在用我的数据集测试它,它工作得非常好

type    pickup_time insert_time first_value
MAN 2020-11-01 03:00:00 2020-11-01 01:00:00 2020-11-01 04:00:00
CAT 2020-11-02 11:00:00 2020-11-02 05:00:00 2020-11-02 12:00:00
MAN 2020-11-01 09:00:00 2020-11-01 06:00:00 2020-11-01 10:00:00