2015-12-21 90 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

相关问题