簡體   English   中英

Impala SQL-獲取最大時間戳記記錄-未產生結果

[英]Impala SQL - Get Maximum Time Stamp Records - Not Yielding Results

我有下表,需要在每個源和表中獲取具有最新時間戳的記錄。 時間戳為Unix格式,最新的時間戳為1531204200。

表格上的數據如下:

src_sys_id  st_mgmnt_cd tblnm               execn_ts    rcd_cnt
SOURCE1     HOT         SUBSCRBR_ACCT_HIST  1531204200  28680
SOURCE1     COLD        SUBSCRBR_ACCT_HIST  1531204200  11874
SOURCE1     WARM        MEMBR_HIST          1531204200  13698
SOURCE1     WARM        SUBSCRBR_ACCT_HIST  1531204200  24211
SOURCE1     HOT         MEMBR_HIST          1531204200  18500
SOURCE2     FINAL       CLAIM               1531204200  5000
SOURCE2     EXPIRED     CLAIM               1531204200  8000
SOURCE2     WARM        CLAIM               1531204200  20000
SOURCE2     HOT         CLAIM               1531204200  45000
SOURCE2     COLD        CLAIM               1531204200  10000
SOURCE3     WARM        INDIV_CVRG          1531204200  2763
SOURCE3     HOT         INDIV_CVRG          1531204200  11874
SOURCE1     HOT         MEMBR_HIST          1528650875  32198
SOURCE2     WARM        CLAIM               1528650875  28000
SOURCE2     HOT         CLAIM               1528650875  60000
SOURCE3     HOT         INDIV_CVRG          1528650875  14637

預期輸出如下:

src_sys_id  st_mgmnt_cd tblnm               execn_ts    rcd_cnt
SOURCE1     HOT         SUBSCRBR_ACCT_HIST  1531204200  28680
SOURCE1     COLD        SUBSCRBR_ACCT_HIST  1531204200  11874
SOURCE1     WARM        MEMBR_HIST          1531204200  13698
SOURCE1     WARM        SUBSCRBR_ACCT_HIST  1531204200  24211
SOURCE1     HOT         MEMBR_HIST          1531204200  18500
SOURCE2     FINAL       CLAIM               1531204200  5000
SOURCE2     EXPIRED     CLAIM               1531204200  8000
SOURCE2     WARM        CLAIM               1531204200  20000
SOURCE2     HOT         CLAIM               1531204200  45000
SOURCE2     COLD        CLAIM               1531204200  10000
SOURCE3     WARM        INDIV_CVRG          1531204200  2763
SOURCE3     HOT         INDIV_CVRG          1531204200  11874

我用下面的查詢

   Select distinct s1.src_sys_id ,
          s1.st_mgmnt_cd,
          from_unixtime(CAST(s2.execn_ts AS BIGINT)) as assessment_dt,
          s1.rcd_cnt
          from dlrm_data_retention.ret_st_mgmnt_sum s1           
          INNER JOIN
          ( select src_sys_id,st_mgmnt_cd,rcd_cnt,execn_ts,row_number() over (partition by src_sys_id order by execn_ts desc) as seqnum
                from dlrm_data_retention.ret_st_mgmnt_sum
           ) s2
           on s1.src_sys_id = s2.src_sys_id and s2.seqnum = 1

這沒有產生結果。 任何幫助表示贊賞。

您可以組合使用ROW_NUMBER加OVER(PARTITION BY + ORDER BY):

SELECT *
    FROM (
        SELECT *,
               ROW_NUMBER() OVER (
                   PARTITION BY table.src_sys_id,
                                table.st_mgmnt_cd
                   ORDER BY table.execn_ts DESC) AS row_number
         FROM table) as time_sorted
    WHERE row_number = 1

    ) as recent
    WHERE row_number=1;

首先,您需要子選擇所需的分區(又名GROUPS)並對其進行排序-在您的情況下,按時間戳記。 每個組的行號從1..n開始。

所需的結果均具有row_number = 1。

請參閱https://www.cloudera.com/documentation/enterprise/5-6-x/topics/impala_analytic_functions.html#over了解有關Impala-OVER語法的更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM