如果满足条件,SQL将返回特定类型的最新记录

如果满足条件,SQL将返回特定类型的最新记录,sql,sql-server,Sql,Sql Server,希望我不会让这件事复杂化。 我编写了以下SQL语句,返回用户最近的事务满足条件 (交易类型不在(4、6、21、23)或存款选项&64中) 如果秩1行满足条件,则形成先前的结果 WHERE sub.rn = 1 AND (TRANS_TYPE NOT IN (4, 6, 21, 23) OR DEPOSIT_OPTION & 64 <> 64) 如果问题不是很清楚,我很抱歉,我已经尽力了 如果存在dbo.存款,则删除表格; drop table if exists dbo.

希望我不会让这件事复杂化。 我编写了以下SQL语句,返回用户最近的事务满足条件 (交易类型不在(4、6、21、23)或存款选项&64中)

如果秩1行满足条件,则形成先前的结果

WHERE sub.rn = 1 AND (TRANS_TYPE NOT IN (4, 6, 21, 23) OR DEPOSIT_OPTION & 64 <> 64) 
如果问题不是很清楚,我很抱歉,我已经尽力了

如果存在dbo.存款,则删除表格;
drop table if exists dbo.Deposits;

create table dbo.Deposits (
User_ID int
, Trans_Type int
, Deposit_Option int
, Rank int
);

insert into dbo.Deposits (User_ID, Trans_Type, Deposit_Option, Rank)
values (1, 4, 7, 1), (1, 10, 7, 2)
, (2, 22, 64, 1), (2, 23, 4, 2), (2, 10, 126, 3), (2, 4, 7, 4)
, (3, 10, 3, 1)
, (4, 6, 64, 1), (4, 10, 7, 2);

select
sub2.User_ID, sub2.Trans_Type, sub2.Rank
from dbo.Deposits sub
inner join dbo.Deposits sub2 on sub.User_ID = sub2.User_ID
        and sub2.Trans_Type = 10
where sub.Rank = 1 AND (sub.Trans_Type NOT IN (4, 6, 21, 23) OR sub.Deposit_Option & 64 <> 64)
创建表dbo.depositions( 用户ID int ,Trans_Type int ,存款选项int ,排名int ); 插入dbo.Deposits(用户ID、交易类型、存款选项、排名) 值(1,4,7,1)、(1,10,7,2) , (2, 22, 64, 1), (2, 23, 4, 2), (2, 10, 126, 3), (2, 4, 7, 4) , (3, 10, 3, 1) , (4, 6, 64, 1), (4, 10, 7, 2); 选择 sub2.User\u ID,sub2.Trans\u Type,sub2.Rank 来自dbo.存款子公司 在sub.User\u ID=sub2.User\u ID上的内部联接dbo.sub2 和sub2.Trans_Type=10 其中sub.Rank=1和(sub.Trans_类型不在(4、6、21、23)或sub.Deposit_选项&64中)
添加了sql server标记,因为这是sql server语法。帮我们一个忙,提供一些数据,给我们一些具体的“我期望的”值怎么样?听起来几乎像是需要一个
应用而不是一个连接。我试着添加一个我期望的示例,你可以看到Rank1中的第一个条件是否满足,然后我想要选择第一个TRANS_类型10为什么用户Id 1在输出中而用户Id 4不在输出中?有什么区别?
WHERE sub.rn = 1 AND (TRANS_TYPE NOT IN (4, 6, 21, 23) OR DEPOSIT_OPTION & 64 <> 64) 
 User_ID   TRANS_TYPE   Rank
   1           10        2
   2           10        3
   3           10        1
drop table if exists dbo.Deposits;

create table dbo.Deposits (
User_ID int
, Trans_Type int
, Deposit_Option int
, Rank int
);

insert into dbo.Deposits (User_ID, Trans_Type, Deposit_Option, Rank)
values (1, 4, 7, 1), (1, 10, 7, 2)
, (2, 22, 64, 1), (2, 23, 4, 2), (2, 10, 126, 3), (2, 4, 7, 4)
, (3, 10, 3, 1)
, (4, 6, 64, 1), (4, 10, 7, 2);

select
sub2.User_ID, sub2.Trans_Type, sub2.Rank
from dbo.Deposits sub
inner join dbo.Deposits sub2 on sub.User_ID = sub2.User_ID
        and sub2.Trans_Type = 10
where sub.Rank = 1 AND (sub.Trans_Type NOT IN (4, 6, 21, 23) OR sub.Deposit_Option & 64 <> 64)