簡體   English   中英

Teradata 每天獲取 MTD 唯一用戶(例如,在 3 月 12 日,我需要有第 1 到第 12 個唯一用戶。過去一年的每個日期也是如此

[英]Teradata Get MTD Unique Users for each day (ex. on 12th Mar I need to have 1st to 12th unique users. similarly for each date for last one year

我需要讓 MTD 唯一用戶數在過去 1 年內每天計數。 前任。 如果我的數據就像

dt  customername
1   a
1   b
2   a
2   c
3   b
3   a
4   c
4   d
4   e

預期輸出 - 第一個只有 2 個唯一用戶。 在第 2 個(第 1 個和第 2 個)3 個用戶上。 第 3 位(第 1 至第 3 位)3 個用戶。 4 日(第 1 至 4 日)5 個用戶。 我在過去 1 年的每個日期的每個月都需要這個

dt uniquecustcount
1  2
2  3
3  3
4  5

我的數據采用以下格式,但 MTD 的核心邏輯高於 1。 請感謝任何幫助

CREATE MULTISET TABLE GK_DAILY_USERS ,NO FALLBACK ,
     NO BEFORE JOURNAL,
     NO AFTER JOURNAL,
     CHECKSUM = DEFAULT,
     DEFAULT MERGEBLOCKRATIO
     (
      EVENT_DATE DATE FORMAT 'yyyy-mm-dd',
      Subs_Id INTEGER,
      PAYMENT_METHOD_CD VARCHAR(8) CHARACTER SET UNICODE NOT CASESPECIFIC,
      Data_User_Flag VARCHAR(1) CHARACTER SET UNICODE NOT CASESPECIFIC,
      BUS_UNIT VARCHAR(20) CHARACTER SET LATIN NOT CASESPECIFIC,
      Event_Count INTEGER)
PRIMARY INDEX ( EVENT_DATE ,Subs_Id );

Insert into GK_DAILY_USERS values (?,?,?,?,?,?);

我正在嘗試下面的sql。 我知道這個 sql 沒有意義,因此正在尋找解決方案。

SELECT EVENT_DATE, MAX(R2) FROM (
SELECT EVENT_DATE 
,COUNT(A.SUBS_ID)OVER(ORDER BY ROWNUM,A.SUBS_ID) AS R2
FROM (
SELECT A.EVENT_DATE,A.SUBS_ID
,Row_Number() Over (Order by EVENT_DATE, SUBS_ID) rownum
,COUNT(A.SUBS_ID)OVER(PARTITION BY A.SUBS_ID ORDER BY A.EVENT_DATE) AS RUN_TOTAL3
FROM  GK_DAILY_USERS A 
WHERE Data_User_Flag='Y' 
AND subs_id in (566875703,289813839, 151153086,279262050,18378517)
ORDER BY EVENT_DATE, SUBS_ID
) A 
WHERE RUN_TOTAL3 = 1
) A GROUP BY EVENT_DATE ORDER BY 1
;
SELECT EVENT_DATE 
   -- new customers per date
  ,Sum(SUBS_ID) AS daily_new_cust
  -- running total of new customers per date
  ,Sum(Sum(SUBS_ID))
   Over(ORDER BY EVENT_DATE
        ROWS Unbounded Preceding) AS unique_cust
FROM
 (
   SELECT *
   FROM  GK_DAILY_USERS
   WHERE Data_User_Flag='Y' 
   AND subs_id IN (566875703,289813839, 151153086,279262050,18378517)
   QUALIFY
      -- return a single row with the earliest date for each subs_id
      Row_Number()
      Over (PARTITION BY A.SUBS_ID
            ORDER BY EVENT_DATE) = 1
 ) AS dt
GROUP BY EVENT_DATE 
ORDER BY 1
;

暫無
暫無

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

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