首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何查看在SQL中当前选择后表中是否重新出现该值

如何查看在SQL中当前选择后表中是否重新出现该值
EN

Stack Overflow用户
提问于 2018-10-27 06:46:54
回答 1查看 36关注 0票数 1

我有下面的数据表CRA_feasibility_test

代码语言:javascript
复制
atmid       CRA     monday  tuesday wednesday   thursday    friday  saturday
DA0068C1    ABC       Y      N      Y           N           N        Y

我想根据我的date.If的工作日来选择数据,它是Y,然后想得到最近的'Y‘,也就是从@date中选择Y的那一天。

我也想要下一个

我正在做以下工作

代码语言:javascript
复制
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] 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-27 07:34:53

如果我正确理解,您可以尝试通过cte recursive为接下来的7天创建一个日历表,然后使用CROSS APPLYvalues make Unp透视来获取Y日期,这是最近的一天。

代码语言:javascript
复制
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

木琴

结果

代码语言:javascript
复制
atmid       today               nextYDay            nextYname
DA0068C1    15/06/2018 00:00:00 16/06/2018 00:00:00 Saturday
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53019425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档