Reputation: 97
Got an SQL stmt, where got HeatingElements with their Heatingtimes and Timestamps of the last Meassure.
SELECT
ts_diff,
name,
s_per_deg,
CAST(dates.gen_date AS DATE) AS gen_date
FROM
heat_data
RIGHT JOIN
dates
ON
dates.gen_date = DATE(ts)
WHERE name != ''
ORDER BY gen_date DESC
My Output is at the moment:
ts_diff name s_per_deg gen_date
202 HeatingElement6HeatTime 33.667 16.08.2020
205 HeatingElement4HeatTime 34.167 16.08.2020
205 HeatingElement5HeatTime 34.167 16.08.2020
208 HeatingElement7HeatTime 34.667 16.08.2020
226 HeatingElement2HeatTime 37.667 16.08.2020
199 HeatingElement6HeatTime 33.167 09.08.2020
202 HeatingElement4HeatTime 33.667 09.08.2020
204 HeatingElement5HeatTime 34.000 09.08.2020
206 HeatingElement7HeatTime 34.333 09.08.2020
223 HeatingElement2HeatTime 37.167 09.08.2020
206 HeatingElement5HeatTime 34.333 07.08.2020
209 HeatingElement7HeatTime 34.833 07.08.2020
228 HeatingElement2HeatTime 38.000 07.08.2020
202 HeatingElement6HeatTime 33.667 07.08.2020
205 HeatingElement4HeatTime 34.167 07.08.2020
198 HeatingElement6HeatTime 33.000 02.08.2020
204 HeatingElement7HeatTime 34.000 02.08.2020
202 HeatingElement5HeatTime 33.667 02.08.2020
201 HeatingElement4HeatTime 33.500 02.08.2020
223 HeatingElement2HeatTime 37.167 02.08.2020
200 HeatingElement6HeatTime 33.333 26.07.2020
203 HeatingElement4HeatTime 33.833 26.07.2020
203 HeatingElement5HeatTime 33.833 26.07.2020
206 HeatingElement7HeatTime 34.333 26.07.2020
223 HeatingElement2HeatTime 37.167 26.07.2020
What im trying is to get only the last Measure of each Element, so my Result should look like this:
ts_diff name s_per_deg gen_date
202 HeatingElement6HeatTime 33.667 16.08.2020
205 HeatingElement4HeatTime 34.167 16.08.2020
205 HeatingElement5HeatTime 34.167 16.08.2020
208 HeatingElement7HeatTime 34.667 16.08.2020
226 HeatingElement2HeatTime 37.667 16.08.2020
I tried to ORDER BY gen_date GROUP BY name
but i always get Errors. Didnt found a Solution yet.
I cant say LIMIT
because on other Databases i got other (more or less Elements).
Upvotes: 0
Views: 55
Reputation: 1440
try using analytical functions!
SELECT ts_diff
, name
, s_per_deg
, gen_date
FROM (
SELECT ts_diff
, name
, s_per_deg
, CAST(dates.gen_date AS DATE) AS gen_date
, ROW_NUMBER() OVER (PARTITION BY name ORDER BY gen_date DESC) rn
FROM heat_data
RIGHT JOIN dates ON dates.gen_date = DATE(ts)
WHERE name != ''
) a
WHERE rn = 1
(Changed partition by as per comment below)
Upvotes: 1