SQL查询支持
我有一个事务表,我想从表中提取那些时差为2小时且事务在两个不同国家执行的事务。 我已经编写了以下查询,但问题是它也获取了那些国家相同的事务 查询是: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
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”而不是明显的非日期时间!占位符值?