我应该使用什么样的SQLWHERE条件来将一个表中的一行数据插入到另一个表中,以获得具有最高时间的特定日期?

mefy6pfw  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(255)

我有一张aws红移的table,如下图所示:

下面是我用来将数据从一个表移动到另一个表的sql查询。发生的问题正如您在一天的表中看到的,有多个具有不同时间戳的值,我只想在结果表“test\u dcm.mediacost\u latest”中为每一天指定一个值。我应该对“日期”使用什么条件,以便sql query每天只选取一个值?

INSERT INTO test_dcm.mediacost_latest (campaign, mediacost, recent_sdc_report_time)
SELECT campaign, mediacost, _sdc_report_time
FROM test_dcm_test_report
WHERE date='????????????';
a64a0gku

a64a0gku1#

您可以使用行编号来指定排名。这是基于标准sql的,希望得到红移的支持:

with cte as 
 (
    SELECT campaign, mediacost, _sdc_report_time
      ,row_number() -- rank each campaign per day
       over (partition by campaign, cast(_sdc_report_time as date)
             order by _sdc_report_time desc) as rn
    FROM test_dcm_test_report
 )
SELECT campaign, mediacost, _sdc_report_time
from cte
where rn = 1
4ktjp1zp

4ktjp1zp2#

我想你可以用它做你想做的事 limit :

SELECT campaign, mediacost, _sdc_report_time
FROM test_dcm_test_report
WHERE _sdc_report_time >= ? AND _sdc_report_time < ? + interval '1 day'
LIMIT 1;
rkkpypqq

rkkpypqq3#

不是为了澄清你的问题,但如果你只是在寻找一个结果的一天,你可以使用

LIMIT 1

在日期选择之后,但您可能希望在此之前对结果进行排序,或者在两天之间添加结果。

相关问题