3

オンライン決済ゲートウェイシステムで問題が発生し、トランザクションエントリが互いに数分以内に重複することがあります。

これらのトランザクションの記録を作成して、分析および修正できるようにします。

次のような単一のテーブル。これは、1つのカード番号のみの結果を示しています。同じ日に発生したトランザクションのみを返し、できれば最後の2行と同様に互いに5秒以内に返すことをお勧めします。

txn_authcode   card_number   cardtype   txn_status   txn_value   entryTimeStamp
-------------------------------------------------------------------------------
1491109220     ....0279      Visa       FAILED       20.00       2011-06-24 19:49:00
1491109219     ....0279      Visa       FAILED       20.00       2012-05-28 22:47:57
1491109218     ....0279      Visa       FAILED       20.00       2012-05-28 22:46:39
1491109217     ....0279      Visa       FAILED       20.00       2012-05-28 22:46:35

これまでのところ、特定のカード番号の重複レコードを取得する次のものがありますが、同じ日に、できれば互いに5秒以内にレコードを取得するために、これをさらに細かくする方法がわかりません。

        select * from(
            select  t1.txn_authcode,t1.txn_status,t1.txn_value,t1.entryTimeStamp
                from    transactions t1
                where 1=1
                and exists
                (select null
                 from   transactions t2
                 where  t1.card_number = t2.card_number
                 and t1.entryTimeStamp <> t2.entryTimeStamp
                 and t2.entryTimeStamp >= '2012-05-01'
                 and t2.entryTimeStamp <= '2012-06-01'
                 --*** AND DATEDIFF ( day , t1.entryTimeStamp , t2.entryTimeStamp ) < 1 
    --(datediff above doesn't work as it can return a single record for a given card, 
--but we only want records that have at least one other transaction record on the same 
--day for the same card)

                 )
                 and t1.entryTimeStamp >= '2012-05-01'
                 and t1.entryTimeStamp <= '2012-06-01'
             )x
        order by card_number,entryTimeStamp desc

誰かがこれを手に入れてくれませんか?

4

2 に答える 2

3
...
AND DATEDIFF ( day , t1.entryTimeStamp , t2.entryTimeStamp ) < 1
AND t1.txn_authcode < t2.txn_authcode
...

クエリのコメントアウトされた部分を上記のステートメントに置き換えると、必要なものが得られるはずです。

于 2012-06-04T22:30:10.977 に答える
3

数秒間隔が必要な場合は、使用します

AND DATEDIFF ( ss, t1.entryTimeStamp , t2.entryTimeStamp ) < 5

当日のみご利用の場合は

SQL Server 2008 以降

AND CONVERT(date,t1.entryTimeStamp) = convert(date,t2.entryTimeStamp)

SQL Server 2005 以前

and convert(char(10),t1.entryTimeStamp,101) = convert(char(10),t2.entryTimeStamp,101)

両方が必要な場合は、組み合わせて使用​​してください。

于 2012-06-04T22:45:27.383 に答える