计算带有两个Where子句的两列

时间:2012-06-21 23:40:55

标签: sql teradata

我知道这是在当天晚些时候,我的大脑只是油炸....

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

例如:

  

会员| Tran Date

     

123 | 01/01/2011

     

789 | 06/01/2011

     

123 | 10/31/2011

     

678 | 04/03/2011

     

789 | 06/01/2012

因此,2名成员在2012年1月1日之前共有3笔交易,截止日期为2012年1月1日。

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

  

会员| TRANS

     

2 | 3

2 个答案:

答案 0 :(得分: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)
)

答案 1 :(得分: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'
    )