如果满足条件,SQL将返回特定类型的最新记录
希望我不会让这件事复杂化。 我编写了以下SQL语句,返回用户最近的事务满足条件 (交易类型不在(4、6、21、23)或存款选项&64中) 如果秩1行满足条件,则形成先前的结果如果满足条件,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.
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)