0

我知道现在已经很晚了,我的大脑只是油炸了....

使用 Teradata,我需要在过去六个月中COUNT DISTINCT MEMBERS没有过,以及他们历史上拥有的数量(在六个月之前)。我们可以假设截止日期为 01/01/2012。所有表都包含在一个表中。TRANSCOUNTTRANS

例如:

会员 | 交易日期

123 | 2011 年 1 月 1 日

第789章 2011 年 6 月 1 日

123 |2011 年 10 月 31 日

第678章 2011 年 4 月 3 日

第789章 2012 年 6 月 1 日

因此,2 个成员在 2012 年 1 月 1 日之前总共有 3 笔交易,而在 2012 年 1 月 1 日之后没有交易。

在这个例子中,我的结果是:

会员 | 反式

2 | 3

4

2 回答 2

0

您不能在一条 SQL 语句中完成。使用子查询。这是 TSQL,因为我不熟悉 Teradata。

DECLARE @CUTOFF DATETIME = DATEADD(MO,-6,GETDATE()) --6MTHS AGO
SELECT COUNT(MEMBERID) AS MEMBERS, SUM(TRANSCOUNT) AS TRANS FROM (
SELECT DISTINCT 
  MEMBERID, 
  (SELECT COUNT(*) TRANSDATE WHERE TRANSDATA.MEMBERID = MEMBER.MEMBERIF) AS TRANSCOUNT
FROM MEMBER WHERE NOT EXISTS 
  (SELECT * FROM TRANSDATA, MEMBER WHERE 
     TRANSDATA.MEMBERID = MEMBER.MEMBERIF 
     AND TRANDATE > @CUTOFF)
)
于 2012-06-22T00:01:15.040 回答
0

试试这个解决方案:

SELECT
    COUNT(DISTINCT member_id) AS MEMBERS,
    COUNT(*) AS TRANS
FROM
    tbl
WHERE 
    member_id NOT IN
    (
        SELECT DISTINCT member_id
        FROM tbl
        WHERE trans_date > '2012-01-01'
    )
于 2012-06-22T00:05:30.850 回答