1

私はクレジットカード会社で働いています。私たちのデータベースには顧客テーブルと取引テーブルがあります。customer テーブルのフィールドは、SSN と CustomerKey です。取引テーブルのフィールドは、CustomerKey、取引日 (Transdate)、および取引金額 (TransAmt) です。

2012 年の 2 日間の取引金額の合計が 1000 を超える各 ssn の各取引を一覧表示できるレポートが必要です。

トランザクション テーブルの生データの例を次に示します。

Trans#-----CustKey-----Date--------Amount
1-----------12345----01/01/12--------$600
2-----------12345----01/02/12--------$500
3-----------67890----01/03/12--------$700
4-----------12345----04/01/12--------$600
5-----------67890----04/02/12--------$600

Customer テーブルの生データの例を次に示します。

CustKey-----SSN
12345------123456789
67890------123456789

必要な結果は次のとおりです。

Trans#------SSN---------Date---------Amount---Group Key
1--------123456789----01/01/12---------$600--------1
2--------123456789----01/02/12---------$500--------1 
2--------123456789----01/02/12---------$500--------2 
3--------123456789----01/03/12---------$700--------2
4--------123456789----04/01/12---------$600--------3
5--------123456789-----04/02/12--------$600--------3

私の結果からわかるように、Trans# 2 は 2 日間で $1000 を超えたトランザクションのグループの一部であったため、2 回リストされています。1000 を超えたトランザクションの各グループは、グループ キーによって識別されます。

4

1 に答える 1

0

リード/ラグ機能がないと仮定すると、私のアプローチは次のようになります。

まず、基準を満たす日付のペアを決定します。自己結合を使用してこれを実行し、基準を満たす日付のペアでトランザクションを見つけることができます。これで日付の説明がありますが、これらは2行ではなく1行にあります。

したがって、これをトランザクションに戻す必要があります。最初は最初のデートで、次に再び2番目のデートで。この二重結合(実際には左外部結合)により、複数の基準が満たされた場合にトランザクションが複数回表示されるようになります。

これを試みるクエリは次のとおりです。

with pairs as
     (select t.trans, t.ssn, min(date) as mindate, max(date) as maxdate
      from (select t.*, c.ssn
            from transaction t join
                 customer c
                 on t.custkey = c.custkey
           ) t join
           (select t.*, c.ssn
            from transaction t join
                 customer c
                 on t.custkey = c.custkey
           ) tnext
           on t.ssn= tnext.ssn and
              t.date = tnext.date - 1
      group by t.trans, t.ssn, t.amount
      having sum(t.amount) > 1000
     ) pairs
select t.trans, c.ssn
from transactions t. join
     customer c
     on t.custkey = c.custkey left outer join
     pairs pfirst
     on t.date = pfirst.mindate and
        c.custkey = pfirst.custkey left outer join
     pairs plast
     on t.date = plast.maxdate and
        c.custkey = plast.custkey
于 2012-09-19T01:18:04.307 に答える