代码之家  ›  专栏  ›  技术社区  ›  Himanshu Pant

在Teradata中实现聚合

  •  0
  • Himanshu Pant  · 技术社区  · 6 年前

    我想按升序聚合2个字段proct\u dt、dw\u job\u id 通过使用下面的查询和结果,可以清楚地了解我的场景。

    第一次查询:-

    从头开始选择。COGIPF\U RUNREPORT\U test1 order by proct\U dt,dw\U job\U id,其中dw\U job\U id=10309

    输出:-

    dw_job_id   proct_dt           start_ts          end_ts                      time_diff  
    

    1 10309 2018-03-06 00:00:00 2018-03-06 07:04:18 2018-03-06 07:04:22.457000 0
    2 10309 2018-03-06 00:00:00 2018-03-06 06:58:50 2018-03-06 06:58:51.029000 0
    3 10309 2018-03-07 00:00:00 2018-03-07 06:35:36 2018-03-07 06:36:03.809000 1
    4 10309 2018-03-06 00:00:00 2018-03-06 07:00:35 2018-03-06 07:00:40.702000 0

    5 10309 2018-03-06 00:00:00 2018-03-06 06:30:25 2018-03-06 06:30:42.759000 0

    6 10309 2018-03-06 00:00:00 2018-03-06 07:10:27 2018-03-06 07:10:28.715000 0

    7 10309 2018-03-06 00:00:00 2018-03-06 06:59:44 2018-03-06 06:59:48.315000 0

    8 10309 2018-03-06 00:00:00 2018-03-06 07:00:15 2018-03-06 07:00:15.086000 0

    9 10,309 2018-03-06 00:00:00 2018-03-06 07:04:02 2018-03-06 07:04:02.925000 0

    第二次查询:-

    从头开始选择。proct\U dt asc、dw\U job\U id asc的fact\U测试顺序,其中dw\U job\U id=10309

    结果:-

    dw_job_id   proct_dt            start_ts              end_ts      status
    

    1 10309 2018-03-06 00:00:00 2018-03-06 06:30:25 2018-03-06 06:30:42.759 12

    2 10309 2018-03-07 00:00:00 2018-03-07 06:35:36 2018-03-07 06:36:03.809 12

    因此,在第二个查询中,我通过第一次出现proct\u dt、start\u ts、end\ts,从第一个表中得到了所需的结果

    请让我知道任何澄清 如果有人能帮助完成这个案子,那就太好了。

    谢谢

    1 回复  |  直到 6 年前
        1
  •  0
  •   dnoeth    6 年前

    不清楚您想从您的解释中得到什么,但看起来您想每天第一次运行作业,这很容易使用Row\u编号:

    select * 
    from scratch.COGIPF_RUNREPORT_test1
    where dw_job_id =10309
    qualify
       row_number()
       over (partition by dw_job_id, proc_dt -- for each job & date
             order by start_ts) = 1          -- only the 1st run
    
    推荐文章