2017-03-29 37 views
0

我有這個字段的表:SQL - 添加天的日期在一個循環

Id int(11) pk, 
Start_date date, 
End_date date, 
type tinyint(1), 
Frequency int. 

我想要做一個選擇這個表,其中起始日期+頻率= @date(可變日期),直到END_DATE(循環)。

這是如何與SQL?

在此先感謝。

編輯: 可變日期是(例如):

SET @date = '2017-03-30' 

類型可以是0或1:

  • 如果type = 0我的查詢是:

    select * from table 
    where type = 0 and start_date <= @date AND end_date>[email protected] 
    
  • 如果type = 1,則frequency是具有整數的字段(間隔天數)。所以我必須檢查將這個值添加到start_date是否等於@date。

    • 如果是,我必須回到當前記錄
    • 如果沒有,我不得不重複此操作

      Date current = start_date + interval of 'frequency' days 
      while(current < end_date){ 
      if(current == @date) 
      (this is the record I want) 
      else 
      current+=frequency 
      } 
      

類型1罐的查詢結果不止一個記錄。最後,我想UNION的類型0和1的結果在獨特的選擇。

+0

請提供樣本數據和期望的結果。 –

+1

SQL是一種功能強大的語言。如果你以正確的方式做事,你幾乎不需要循環。一切都應該基於集合來完成。你能解釋你想達到什麼嗎? –

+0

@Zack檢查我的編輯,謝謝 – Fidelis

回答

1

看起來像你想要的東西,如:

select * from table 
where 
    start_date <= @date AND 
    end_date>[email protected] AND 
    (
    type = 0 OR 
    (
     type = 1 AND 
     mod(datediff(@date,start_date),frequency) = 0 
    ) 
    ) 
+0

它的作品,太棒了!謝謝 ;) – Fidelis