编程新秀 - 限制从2个表

时间:2015-01-19 15:24:38

标签: mysql

我试图确定“第一次给予者”,这是2015财年但从未给过的人。我还需要忽略因某种原因而给出的用户(appealCode)。

下面是我的表格中的一些字段以及需要限制的信息的示例。

 **FundLedger**         
 Account ID EntryAmount GiftReceivedDt  AppealCode
 1000              $500     7/1/2014    1
 1000              $500     2/2/2002    2
 2000               $25     8/1/2014    1
 2000               $25     9/1/2014    1
 3000              $100     10/1/2014   1
 4000            $1,000     11/1/2014   2

 **ConstituentTotals**          
 ConstituentID  FirstTransactionDate    LastTransactionDate CashAmount
          1000              2/2/2002               1/1/2014     $1,000 
          2000              3/1/2014               4/1/2014        $50 
          3000              5/1/2014               5/1/2014       $100 
          4000             11/1/2014              11/1/2014     $1,000 

我需要的是找到在2014年6月1日到今天之间从未给过的成员的数量,并且没有给予AppealCode 2礼物。

因此我从样本信息中得到的数字是'2'。

 **Information Needed**             
 ConstituentID  CashAmount  FirstTransactionDate    LastTransactionDate   AppealCode
          2000         $50              3/1/2014            4/1/2014            1
          3000        $100              5/1/2014            5/1/2014            1

截至目前,如果我忽略AppealCode,我可以获得给予的人数,或者我可以获得AppealCode限制,但我得到了给予者的所有交易。

目前在这个阶段,它将计数数量增加了77,000次,每个条目对应一次。

'SELECT
Number_Of_New_Donors = ( SELECT  COUNT(a.ConstituentID) 
                From dbo.FundConstituentTotals a
                RIGHT JOIN dbo.FundLedger b
                ON a.ConstituentID = b.AccountID
                WHERE (a.FirstTransactionDT between '6/1/2014' and '5/31/2015'
                AND a.CashAmount > '0'
                AND a.GivingYear = '2015'
                AND A.GivingYear !< '2015')
                AND (b.GiftReceivedDt between '6/1/2014' and '5/31/2015'
                AND b.RecordTypeID != '0'
                AND b.RecordTypeID != '-1'
                AND b.RecordTypeID != '2'))



                FROM FundConstituentTotals'

建议的回应结果:

ConstituentID   FundConstituentTotalID  ConstituentID   GivingYear  PledgeAmount    CashAmount  NonCashAmount   FirstTrans
        49427                    77314          49427        2015              0           25          0             1/13/2015
        49427   77314   49427   2015    0   25  0   1/13/2015
        49427   77314   49427   2015    0   25  0   1/13/2015
        49427   77314   49427   2015    0   25  0   1/13/2015

刚发现数据是无效的,FirstTransactionDate不提供第一笔交易的日期,只是交易开始发布到分类账的日期(有人在此过去了)。我将不得不在DATES之间使用GiftReceivedDate,并找到一种方法来删除他们在2014年之前的日期。

1 个答案:

答案 0 :(得分:1)

    SELECT  Number_Of_New_Donors = ( SELECT  COUNT(a.ConstituentID) 
                From dbo.FundConstituentTotals a
                LEFT JOIN dbo.FundLedger b
                ON a.ConstituentID = b.AccountID
                    AND a.LastTransactionDate = b.GiftReceivedDt
                WHERE a.FirstTransactionDT between '2015-01-01' and '2015-05-31'
                AND b.AppealCode != 2)

这似乎做你想要的。 FirstTransaction是今年(因为它是第一个,不能有以前的),而且申诉代码不是2.你的代码的其余部分试图做什么?