我有一个数据表,其中有一个列列表(在本例中归结为相关的列):
users(
usr_pkey int identity(1, 1) primary key,
usr_name nvarchar(64),
...,
)
accounts(
acc_pkey int identity(1, 1) primary key,
usr_key int foreign_key references users(usr_pkey),
acc_effective datetime,
acc_expires datetime,
acc_active bit,
...,
)
从这张表中我想抓住所有记录:
所以 - 如果存在活动记录,其中今天的日期介于帐户的有效日期和到期日期之间,我想要该记录。只有在找不到匹配项时,我才希望该用户拥有最近的到期日期。
答案 0 :(得分:5)
除非在TSQL 2008中发生了根本性的变化,否则这是一种蛮力。
select *
from table
where ( ( condition 1 OR condition 2)
AND NOT ( condition 1 AND condition 2) )
答案 1 :(得分:4)
这是我找到的一个解决方案:
select top 1 *
from accounts
where usr_key = @specified_user
order by
acc_active desc,
case
when getdate() between acc_effective and acc_expires then 0
else 1
end,
acc_expires desc
这将有效地按正确的优先顺序排列记录,允许我从列表中选择最顶层的
严格地说,它没有实现独占或,但它可以应用于此数据集以实现相同目的。