如何在给定日期(b)之后获得第一个可能的日期(a),其中日期(a)不在特定表格中而不是星期日?

时间:2017-03-24 22:06:52

标签: sql sql-server

我无法思考这个问题。 问题的确切措辞是(编辑)......忘了上半场:

  

仅考虑Income_o和Outcome_o表。众所周知,周日没有进行金钱操作。   对于每个积分的每个接收日期,请按以下规则确定收款日期:   1.收集日期等于接收日期(收入),如果此时此日期的货款交付表Outcome_o中没有条目。   2.否则,这是接收日期之后的第一个可能日期,即不是星期日,此时此时此表中的Outcome_o表中没有任何条目用于汇款。   输出:点,接收日期,汇款日期。

     

条目按点和日期是唯一的。

  1. Outcome_o(指向,日期,结束)
  2. Income_o(指向,日期,结束)
  3. 所以,我想我会做一个案例陈述,如果在outcome_o表中选择日期+ 1,那么我会意识到我必须这样做一百万次,因为可能会有很长一段时间的条目都在outcome_o表中。

    然后我尝试从outcome_o的min(Date)到outcome_o的max(date)+2创建一个临时日期表,然后取出星期日的天数和outcome_o中的天数,但是这给了我一个错误(关于最大递归的事情达到了极限100)。

    我希望我明白这个解释,如果没有,请告诉我!

    这是正确输出的图片。 enter image description here

2 个答案:

答案 0 :(得分:0)

select top 1 [date]
  from income_o
 where [date] > '20170301'
   and [date] <= dateadd(day, 7, '20170301')
   and datepart(weekday, [date]) <> 0
   and not exists(select *
                    from outcome_o
                   where outcome_o.point  = income_o.point
                     and outcome_o.[date] = income_o.[date])
 order by [date];

鉴于周一是工作日,系统上没有1。

答案 1 :(得分:0)

我修改了我的答案以包含你的答案。我相信这包括您指定的限制/规则。

 select I.point, I.[date] O.date 
      from income_o I
      JOIN outcome_o O ON I.point = O.point
            WHERE O.[date] >= I.[date]          
            and O.date = (select top O2.[date] from outcome_o O2
                        where O2.point = I.point  
                        and  datepart(dw, O2.[date]) <> 1
                       )
    order by I.point, I.[date];