diff --git a/src/main/java/com/backend/glowhouse/controller/SensorDataController.java b/src/main/java/com/backend/glowhouse/controller/SensorDataController.java
new file mode 100644
index 0000000000000000000000000000000000000000..175c78fd1846725ea3cb7f6a365bfdbe445c9dfb
--- /dev/null
+++ b/src/main/java/com/backend/glowhouse/controller/SensorDataController.java
@@ -0,0 +1,42 @@
+package com.backend.glowhouse.controller;
+
+import com.backend.glowhouse.model.DataTableItem;
+import com.backend.glowhouse.model.SensorData;
+import com.backend.glowhouse.service.SensorDataService;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.List;
+
+@RestController
+@RequestMapping("/api/sensorData")
+public class SensorDataController {
+    private ObjectMapper mapper = new ObjectMapper();
+    private SensorDataService sensorDataService;
+
+    @Autowired
+    public SensorDataController(SensorDataService sensorDataService) {
+        this.sensorDataService = sensorDataService;
+    }
+
+    @GetMapping("/aggregateData")
+    @PreAuthorize("hasRole('USER')")
+    public String aggregateSensorDataBetweenDates(
+            @PathVariable(value = "deviceId") String deviceId,
+            @PathVariable(value = "startTime") long startTime,
+            @PathVariable(value = "endTime") long endTime,
+            @PathVariable(value = "dataType") String dataType) throws JsonProcessingException {
+
+
+        List<DataTableItem> sensorDataList = this.sensorDataService.retrieveSensorDataBetweenDates(deviceId, startTime, endTime, dataType);
+
+        return mapper.writeValueAsString(sensorDataList);
+    }
+}
diff --git a/src/main/java/com/backend/glowhouse/repository/device/SensorDataRepository.java b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepository.java
similarity index 68%
rename from src/main/java/com/backend/glowhouse/repository/device/SensorDataRepository.java
rename to src/main/java/com/backend/glowhouse/repository/data/SensorDataRepository.java
index cb8455e86a8b07994eafac9a5e2ec963954feb80..2668f9a1a9628fc9b84de4378c0bc6e5905b91b1 100644
--- a/src/main/java/com/backend/glowhouse/repository/device/SensorDataRepository.java
+++ b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepository.java
@@ -1,10 +1,10 @@
-package com.backend.glowhouse.repository.device;
+package com.backend.glowhouse.repository.data;
 
 import com.backend.glowhouse.model.SensorData;
 import org.springframework.data.mongodb.repository.MongoRepository;
 
 import java.util.List;
 
-public interface SensorDataRepository extends MongoRepository<SensorData, String> {
+public interface SensorDataRepository extends MongoRepository<SensorData, String>, SensorDataRepositoryCustom {
 
 }
diff --git a/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryCustom.java b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryCustom.java
new file mode 100644
index 0000000000000000000000000000000000000000..48ce4ac5c9bd53fc167731d7145a32394a8458c2
--- /dev/null
+++ b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryCustom.java
@@ -0,0 +1,10 @@
+package com.backend.glowhouse.repository.data;
+
+import com.backend.glowhouse.model.DataTableItem;
+
+import java.util.Date;
+import java.util.List;
+
+public interface SensorDataRepositoryCustom {
+    List<DataTableItem> findDataByDeviceIdBetweenDates(String deviceId, Date startDate, Date endDate, String dataType);
+}
diff --git a/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryImpl.java b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..76be6fa991adf8cd52b9df0b1de4bc1277934ac9
--- /dev/null
+++ b/src/main/java/com/backend/glowhouse/repository/data/SensorDataRepositoryImpl.java
@@ -0,0 +1,57 @@
+package com.backend.glowhouse.repository.data;
+
+import com.backend.glowhouse.model.DataTableItem;
+import com.backend.glowhouse.model.SensorData;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+public class SensorDataRepositoryImpl implements SensorDataRepositoryCustom {
+    private final MongoTemplate mongoTemplate;
+
+    @Autowired
+    public  SensorDataRepositoryImpl(MongoTemplate mongoTemplate) {
+        this.mongoTemplate = mongoTemplate;
+    }
+
+    @Override
+    public List<DataTableItem> findDataByDeviceIdBetweenDates(String deviceId, Date startDate, Date endDate, String dataType) {
+        //Query for existing device
+        Query query = new Query();
+        query.addCriteria(Criteria.where("dId").is(deviceId));
+        query.addCriteria(Criteria.where("date").gte(startDate));
+        query.addCriteria(Criteria.where("date").lte(endDate));
+
+        List<SensorData> sensorDataList = mongoTemplate.find(query, SensorData.class);
+
+        List<DataTableItem> dataTable = new ArrayList<>();
+        for (SensorData data : sensorDataList) {
+            if (data.getDate() != null) {
+                float value = 0f;
+
+                switch (dataType) {
+                    case "t":
+                        value = data.getT();
+                        break;
+                    case "h":
+                        value = data.getH();
+                        break;
+                    case "ph":
+                        value = data.getPh();
+                        break;
+                }
+
+                if (value != 0f) {
+                    dataTable.add(new DataTableItem(data.getDate().getTime(), value));
+                }
+            }
+        }
+
+        return dataTable;
+    }
+}
diff --git a/src/main/java/com/backend/glowhouse/service/SensorDataService.java b/src/main/java/com/backend/glowhouse/service/SensorDataService.java
index 08332daacce50688ede6c06ce1e6532cd46293eb..79b47ce33e17c4333e8362b1c961fbff7c65b024 100644
--- a/src/main/java/com/backend/glowhouse/service/SensorDataService.java
+++ b/src/main/java/com/backend/glowhouse/service/SensorDataService.java
@@ -1,10 +1,12 @@
 package com.backend.glowhouse.service;
 
+import com.backend.glowhouse.model.DataTableItem;
 import com.backend.glowhouse.model.SensorData;
-import com.backend.glowhouse.repository.device.SensorDataRepository;
+import com.backend.glowhouse.repository.data.SensorDataRepository;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.util.Date;
 import java.util.List;
 
 @Service
@@ -23,4 +25,11 @@ public class SensorDataService {
     public void processMultipleSensorData(List<SensorData> sensorData) {
         this.sensorDataRepository.saveAll(sensorData);
     }
+
+    public List<DataTableItem> retrieveSensorDataBetweenDates(String deviceId, long startTime, long endTime, String dataType) {
+        Date startDate = new Date(startTime);
+        Date endDate = new Date(endTime);
+
+        return this.sensorDataRepository.findDataByDeviceIdBetweenDates(deviceId, startDate, endDate, dataType);
+    }
 }