Skip to content

Commit e966d32

Browse files
committed
Improving query for last value before timestamp.
1 parent 30c840f commit e966d32

File tree

3 files changed

+13
-5
lines changed

3 files changed

+13
-5
lines changed

src/main/java/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -306,7 +306,8 @@ private String createQueryForValueBefore(
306306
+ timeSeriesUuid.toString()
307307
+ "' AND "
308308
+ timeColumnName
309-
+ " < ?;";
309+
+ " < ?"
310+
+ "ORDER BY time DESC LIMIT 1;";
310311
}
311312
/**
312313
* Creates a base query to retrieve all time keys before a given time for given time series with

src/test/groovy/edu/ie3/datamodel/io/source/sql/SqlTimeSeriesSourceIT.groovy

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import edu.ie3.datamodel.io.connectors.SqlConnector
1212
import edu.ie3.datamodel.io.naming.DatabaseNamingStrategy
1313
import edu.ie3.datamodel.io.naming.timeseries.ColumnScheme
1414
import edu.ie3.datamodel.io.naming.timeseries.IndividualTimeSeriesMetaInformation
15+
import edu.ie3.datamodel.models.timeseries.individual.TimeBasedValue
1516
import edu.ie3.datamodel.models.value.*
1617
import edu.ie3.test.helper.TestContainerHelper
1718
import edu.ie3.util.TimeUtil
@@ -125,12 +126,17 @@ class SqlTimeSeriesSourceIT extends Specification implements TestContainerHelper
125126

126127
def "A SqlTimeSeriesSource is able to return the previous value for a given time"() {
127128
when:
128-
def actual = pSource.getPreviousTimeBasedValue(TIME_15MIN)
129+
def actual = pSource.getPreviousTimeBasedValue(time)
129130

130131
then:
131-
actual.isPresent()
132-
actual.get().time == TIME_00MIN
133-
actual.get().value == P_VALUE_00MIN
132+
actual.isPresent() == expectedResult.isPresent()
133+
actual == expectedResult
134+
135+
where:
136+
time | expectedResult
137+
TIME_00MIN | Optional.empty()
138+
TIME_15MIN | Optional.of(new TimeBasedValue<>(TIME_00MIN, P_VALUE_00MIN))
139+
TIME_30MIN | Optional.of(new TimeBasedValue<>(TIME_15MIN, P_VALUE_15MIN))
134140
}
135141

136142
def "A SqlTimeSeriesSource can read multiple time series values for a time interval"() {

src/test/groovy/edu/ie3/test/common/TimeSeriesSourceTestData.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ final class TimeSeriesSourceTestData {
2020

2121
public static final ZonedDateTime TIME_00MIN = ZonedDateTime.parse("2020-01-01T00:00:00Z")
2222
public static final ZonedDateTime TIME_15MIN = ZonedDateTime.parse("2020-01-01T00:15:00Z")
23+
public static final ZonedDateTime TIME_30MIN = ZonedDateTime.parse("2020-01-01T00:30:00Z")
2324

2425
public static final PValue P_VALUE_00MIN = new PValue(
2526
Quantities.getQuantity(1000.0d, StandardUnits.ACTIVE_POWER_IN)

0 commit comments

Comments
 (0)