如何查看 SQL 中的当前选择后该值是否在 table 中再次出现
How to look if the value reoccurs in the table after current selection in SQL
我有以下数据table[CRA_feasibility_test]
atmid CRA monday tuesday wednesday thursday friday saturday
DA0068C1 ABC Y N Y N N Y
我想 select 基于我的工作日的数据 date.If 它是 Y 然后想要最接近 'Y' 即从 @ 开始的那一天是 Y日期。
我也想得到下一个
我正在做以下事情
declare @date datetime set @date ='2018-06-15'
Select @dateT as indentdate, DATENAME(dw,@dateT) as weekdayname,
case when DATENAME(dw,@dateT) ='monday'
then monday
when DATENAME(dw,@dateT) ='tuesday' then
tuesday
when DATENAME(dw,@dateT) ='wednesday' then
wednesday
when DATENAME(dw,@dateT) ='Thursday' then
thursday
when DATENAME(dw,@dateT) ='Friday' then
friday
when DATENAME(dw,@dateT) ='Saturday' then
saturday
end feasible
from [CRA_feasibility_test]
如果我理解正确,您可以尝试通过 cte recursive
为接下来的 7 天创建一个日历 table,然后使用 CROSS APPLY
和 values
make unpivot 来获得Y
最近的日期。
declare @dateT datetime
set @dateT ='2018-06-15'
;with calendar as (
select @dateT startDt,dateadd(day,7,@dateT) endDt, 1 rn
union all
select dateadd(day,1,startDt) , endDt,rn +1
from calendar
WHERE dateadd(day,1,startDt)<endDt
), cte as (
select
atmid,v.*
from CRA_feasibility_test cross apply (
values ('monday',monday), ('tuesday',tuesday), ('wednesday',wednesday), ('thursday',thursday), ('friday',friday), ('saturday',saturday)
) v(name,flag)
)
select atmid,
@dateT today,
min(case when flag = 'Y' then startDt end) nextYDay,
datename(dw,min(case when flag = 'Y' then startDt end) ) nextYname
from calendar t1
join cte t2 on datename(dw,startDt) = t2.name
group by atmid
结果
atmid today nextYDay nextYname
DA0068C1 15/06/2018 00:00:00 16/06/2018 00:00:00 Saturday
我有以下数据table[CRA_feasibility_test]
atmid CRA monday tuesday wednesday thursday friday saturday
DA0068C1 ABC Y N Y N N Y
我想 select 基于我的工作日的数据 date.If 它是 Y 然后想要最接近 'Y' 即从 @ 开始的那一天是 Y日期。
我也想得到下一个
我正在做以下事情
declare @date datetime set @date ='2018-06-15'
Select @dateT as indentdate, DATENAME(dw,@dateT) as weekdayname,
case when DATENAME(dw,@dateT) ='monday'
then monday
when DATENAME(dw,@dateT) ='tuesday' then
tuesday
when DATENAME(dw,@dateT) ='wednesday' then
wednesday
when DATENAME(dw,@dateT) ='Thursday' then
thursday
when DATENAME(dw,@dateT) ='Friday' then
friday
when DATENAME(dw,@dateT) ='Saturday' then
saturday
end feasible
from [CRA_feasibility_test]
如果我理解正确,您可以尝试通过 cte recursive
为接下来的 7 天创建一个日历 table,然后使用 CROSS APPLY
和 values
make unpivot 来获得Y
最近的日期。
declare @dateT datetime
set @dateT ='2018-06-15'
;with calendar as (
select @dateT startDt,dateadd(day,7,@dateT) endDt, 1 rn
union all
select dateadd(day,1,startDt) , endDt,rn +1
from calendar
WHERE dateadd(day,1,startDt)<endDt
), cte as (
select
atmid,v.*
from CRA_feasibility_test cross apply (
values ('monday',monday), ('tuesday',tuesday), ('wednesday',wednesday), ('thursday',thursday), ('friday',friday), ('saturday',saturday)
) v(name,flag)
)
select atmid,
@dateT today,
min(case when flag = 'Y' then startDt end) nextYDay,
datename(dw,min(case when flag = 'Y' then startDt end) ) nextYname
from calendar t1
join cte t2 on datename(dw,startDt) = t2.name
group by atmid
结果
atmid today nextYDay nextYname
DA0068C1 15/06/2018 00:00:00 16/06/2018 00:00:00 Saturday