Display next event date

前端 未结 5 640
离开以前
离开以前 2020-12-02 18:13

The UI design for storing event and event meta data is

\"enter

<
5条回答
  •  一向
    一向 (楼主)
    2020-12-02 18:23

    One way of accomplishing this is by using a loop and inserting a record into a temp table. Then you can simply select from your temp table. In the example below I saved off both the unixtimestamp value as well as that value converted to datetime.

    declare @enddate bigint, @intervalFactor int, @rowresult int
    
    set @enddate = 1391040000
    
    create table #Results
    (
      eventid int,
      eventdate bigint,
      eventdatedate datetime
    )
    
    set @rowresult = 1
    set @intervalFactor = 0
    
    WHILE (@rowresult > 0)
    BEGIN
      Insert #Results (eventid, eventdate, eventdatedate)
      Select events.id, date.meta_value + (intrvl.meta_value * @intervalFactor)
            ,DATEADD(ss,date.meta_value + (intrvl.meta_value * @intervalFactor), CAST('1970-01-01 00:00:00' AS datetime))
          from events
          inner join events_meta date
            on events.id = date.event_id
            AND date.meta_key = 'repeat_start'
          inner join events_meta intrvl
            on events.id = intrvl.event_id
            and intrvl.meta_key = 'repeat_interval_'+ CAST(date.id as Varchar(100))
      where ((@enddate - date.meta_value ) % intrvl.meta_value) >= 0
      and date.meta_value + (intrvl.meta_value * @intervalFactor) <= @enddate
    
    
      set @rowresult = @@rowcount
      set @intervalFactor = @intervalFactor + 1
    
    END  
    
    select * from #Results
    

    Another possible solution for this problem would to utilize a recursive CTE.

提交回复
热议问题