From f574faabe0454e4ec753ac607cfadeac64ff1a8d Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 18 Apr 2026 07:22:20 -0700 Subject: [PATCH] Improve latest position query --- .../org/traccar/storage/DatabaseStorage.java | 22 ++++++++++++------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/src/main/java/org/traccar/storage/DatabaseStorage.java b/src/main/java/org/traccar/storage/DatabaseStorage.java index fc7cbab17..68040b7cc 100644 --- a/src/main/java/org/traccar/storage/DatabaseStorage.java +++ b/src/main/java/org/traccar/storage/DatabaseStorage.java @@ -241,10 +241,12 @@ public class DatabaseStorage extends Storage { } else if (genericCondition instanceof Condition.LatestPositions condition) { if (condition.getDeviceId() > 0) { results.add(condition.getDeviceId()); - } - long period = config.getLong(Keys.DATABASE_POSITION_PERIOD); - if (period > 0) { - results.add(new Date(System.currentTimeMillis() - period * 1000)); + results.add(condition.getDeviceId()); + } else { + long period = config.getLong(Keys.DATABASE_POSITION_PERIOD); + if (period > 0) { + results.add(new Date(System.currentTimeMillis() - period * 1000)); + } } } return results; @@ -306,6 +308,14 @@ public class DatabaseStorage extends Storage { } else if (genericCondition instanceof Condition.LatestPositions condition) { + if (condition.getDeviceId() > 0) { + result.append("deviceId = ? AND "); + } else { + long period = config.getLong(Keys.DATABASE_POSITION_PERIOD); + if (period > 0) { + result.append("fixTime > ? AND "); + } + } result.append("id IN ("); result.append("SELECT positionId FROM "); result.append(getStorageName(Device.class)); @@ -313,10 +323,6 @@ public class DatabaseStorage extends Storage { result.append(" WHERE id = ?"); } result.append(")"); - long period = config.getLong(Keys.DATABASE_POSITION_PERIOD); - if (period > 0) { - result.append(" AND fixTime > ?"); - } } }