Lấy giá trị lớn nhất trong bảng trong một chu kì thời gian xác định
Mình có đoạn truy vấn sau:
SELECT from_unixtime(F.timestamp), F.fuelLevel
FROM `gtse`.`tblFuel` F
JOIN
(SELECT from_unixtime(timestamp) date_and_hour, MAX(fuelLevel) max_fuel
FROM gtse.tblFuel
GROUP BY date_and_hour) AS max_fuel
ON from_unixtime(F.timestamp) = max_fuel.date_and_hour
AND F.fuelLevel = max_fuel
where accountID = 'vinhnghia' and deviceID = '14C-00263'
and from_unixtime(timestamp) between '2014-10-20 00:00:02' and '2014-10-22 10:52:02'
mục đích của mình là lấy ra thời gian và mức nhiên liệu trong database. Nhưng do một số lý do ngoại cảnh mà dữ liệu không chuẩn, do đó mình muốn cứ sau khoảng 1 giờ thì sẽ lấy số liệu một lần ứng với giá trị lớn nhất trong khoảng đó. Code trên của mình làm việc đó, nhưng chắc do một số sai sót nào đó(mình đã kiểm tra và thực tình k xác định được lỗi ở đâu) mà query không chạy được. Mình muốn hỏi là có cách nào khác để lấy được giá trị theo yêu cầu không, và query của mình có sai sót gì không?
mình ngĩ bạn nên đưa csdl lên đây luôn, nếu có dữ kiệu test nữa thì càng tốt.
oops, cơ sở dữ liệu mình cũng k có, phải chạy trên server bạn ạ, mấy triệu bản ghi lận . Trước mình thử như này:
thì được kết quả như này:
đúng cái mình cần, nhưng do mình dùng với table của mình thì không chạy nên mới phải dùng cách trên
mình có ý này, sao bạn k join 24 bảng lại (tương ứng vs 24 giờ trong ngày). Cách này dài nhưng mình ngĩ đơn giản nhất.Hoặc bạn có thể dùng store hoặc cusor. Mình k mở SQL nên viết code chay, chủ yếu nêu ý tưởng.