2015-12-21 128 views
1

我有一個包含2個字段的數據庫表; DateValueDate現場商店每天的日期,不重複和Value現場商店,儀器的每日價值。該值被插入字段值。這個值可以是正值或負值,範圍從-15到15,現在。如何獲取兩個日期之間的所有最大值或最小值

在此基礎上繪製的圖形保持中心線爲零。到目前爲止,我已經做到了。 enter image description here

現在,我在生成報告時遇到問題。比如說,我想獲取價格線開始在兩個日期之間上升/下降的日期列表。例如:在10月1日和2月2日之間,列出數值開始上升/下降的日期。

我知道簡單的SQL對我無能爲力。有人可以建議我從哪裏開始?

回答

3

也許這樣?

Sub Main() 
     Dim pairs = New List(Of Pair) 

     ' pairs ordered by date 
     pairs.Add(New Pair() With {.Date = #1/1/2016#, .Value = 1}) 
     pairs.Add(New Pair() With {.Date = #1/2/2016#, .Value = 2}) 
     pairs.Add(New Pair() With {.Date = #1/30/2016#, .Value = 3}) ' <-- high peak 
     pairs.Add(New Pair() With {.Date = #2/1/2016#, .Value = 2}) 
     pairs.Add(New Pair() With {.Date = #2/2/2016#, .Value = 1}) 
     pairs.Add(New Pair() With {.Date = #2/10/2016#, .Value = -2}) ' <-- low peak 
     pairs.Add(New Pair() With {.Date = #3/1/2016#, .Value = 1}) 
     pairs.Add(New Pair() With {.Date = #3/2/2016#, .Value = 2}) 
     pairs.Add(New Pair() With {.Date = #3/26/2016#, .Value = 3}) ' <-- high peak 
     pairs.Add(New Pair() With {.Date = #4/1/2016#, .Value = 2}) 
     pairs.Add(New Pair() With {.Date = #4/5/2016#, .Value = 1}) ' <-- low peak 
     pairs.Add(New Pair() With {.Date = #4/10/2016#, .Value = 2}) 


     For i As Integer = 0 To pairs.Count - 1 
      If ((i > 0) AndAlso (i < pairs.Count - 1)) Then 
       Dim previousPair As Pair = pairs(i - 1) 
       Dim nextPair As Pair = pairs(i + 1) 
       Dim currentPair As Pair = pairs(i) 

       currentPair.IsPeak = ((previousPair.Value < currentPair.Value) AndAlso (currentPair.Value > nextPair.Value)) OrElse ((previousPair.Value > currentPair.Value) AndAlso (currentPair.Value < nextPair.Value)) 
      End If 
     Next 

     For Each p In pairs 
      If p.IsPeak Then 
       Console.WriteLine(p) 
      End If 
     Next 

     Console.ReadLine() 
    End Sub 


    Private Class Pair 
     Public Property [Date] As DateTime 
     Public Property Value As Integer 
     Public Property IsPeak As Boolean 

     Public Overrides Function ToString() As String 
      Return String.Format("{0:dd/MM/yyyy} {1}", [Date], Value) 
     End Function 
    End Class 
+0

非常感謝。你的代碼幫了我很多。 – John

0

你應該存儲在數據庫中的滾動時間 您可以輕鬆地在數據庫中打勾時間轉換日期和生成報告自/至日期滾動時間

店面「現在滾動時間」 1 - 您應該滾動時間變量存儲在數據庫日期字段:

long ticktime = DateTime.Now.Ticks; 

2-然後生成由間10-JAN-1998和2-FEB-1998

DateTime from_dt = new DateTime(1998, 01, 10); 
DateTime to_dt = new DateTime(1998, 02, 02); 
數據庫報告

3-SQL查詢(「日期是表列或場」)

select * from tablex where(tablex.date>=from_dt.Ticks and tablex.date<=to_dt.Ticks) 
+0

每天只會有一個條目。因此不需要時間。最重要的是,我需要MAX和MIN值,而不是所有的值。標有藍線的日期只是輸出。 – John

2

一個簡單的方法是打開按日期排序該表。

現在,循環查看記錄。移至下一條記錄時,比較當前值與前一記錄的差值的差值,前兩條記錄的值差值爲。如果斜坡不同,你有一擊。

+0

非常感謝。我做到了。你的建議確實幫了我很大忙。 – John

相關問題