SQL查询支持

SQL查询支持,sql,Sql,我有一个事务表,我想从表中提取那些时差为2小时且事务在两个不同国家执行的事务。 我已经编写了以下查询,但问题是它也获取了那些国家相同的事务 查询是: SELECT DISTINCT b.* FROM TRANSACTION_TABLE b, TRANSACTION_TABLE a WHERE b.CARD IN (SELECT b.CARD FROM TRANSACTION_TABLE b, TRANSACTION_TABLE a

我有一个事务表,我想从表中提取那些时差为2小时且事务在两个不同国家执行的事务。 我已经编写了以下查询,但问题是它也获取了那些国家相同的事务

查询是:

SELECT DISTINCT b.* 
FROM TRANSACTION_TABLE b, TRANSACTION_TABLE a
WHERE 
    b.CARD IN (SELECT b.CARD 
                FROM TRANSACTION_TABLE b, TRANSACTION_TABLE a
                WHERE b.TYPE_TXN IN ('21') 
                    AND b.RESPONSE_TXN='00'
                    AND b.DATETIME_TXN BETWEEN DATEADD(hh,-2,GETDATE()) AND GETDATE()
                    AND b.CARD=a.CARD
                    AND b.COUNTRY<>a.COUNTRY
                GROUP BY B.CARD
                   HAVING COUNT(B.CARD)>1 )
    AND b.TYPE_TXN in ('21') 
    AND b.RESPONSE_TXN='00'
    AND b.DATETIME_TXN BETWEEN DDATEADD(hh,-2,GETDATE()) AND GETDATE()
    AND b.CARD=a.CARD
    AND b.COUNTRY<>a.COUNTRY
请导游


谢谢

看起来你应该这样写:

select A.*
  from Transaction_Table A,
       Transaction_Table B
 where -- both transaction should have the same CARD
       (A.Card = B.Card) and
       -- ... But different countries
       -- In order to prevent duplicates > instead of <> 
       (A.Country > B.Country) and
       -- Time difference btw A and B should be less than 2 hours
       -- NB! DMBS dependent! (Oracle version implemented)
       ((Abs(A.DateTime_Txn - B.DateTime_Txn) < 2 / 24) and
       -- Other transaction filters
       (A.Type_TXN in ('21')) and
       (B.Type_TXN in ('21')) and
       (A.Response_TXN = '00') and
       (B.Response_TXN = '00')

顺便说一句,对于我知道的来自OP的单个值,使用in是没有意义的,但无论如何值得一提。只是澄清一下,DATETME_TXN这是一个糟糕的名称,真的是一个绝对时间戳,还是它是相对的,需要转换?请参阅[这篇博文]了解使用具有连续类型(如时间戳)的包含上界的问题。“RESPONSE_TXN”应该是“null”而不是明显的非日期时间!占位符值?