SQL Hämta senaste värdena från olika id

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
LarryXz
Inlägg: 641
Blev medlem: 13 mars 2013, 20:31:08
Ort: Norra Uppland

SQL Hämta senaste värdena från olika id

Inlägg av LarryXz »

Då det var flera år sedan jag höll på med SQL så känner jag att jag glömt en hel del.

Jag har en tabell som ser ut så här.

Kod: Markera allt

CREATE TABLE `temperature` (
  `sensor_id` bigint(18) NOT NULL,
  `reading_time` datetime NOT NULL,
  `temperature` decimal(10,2) NOT NULL
)
I den sparas temperatur från flera temperatursensor och varje sensor har ett eget id.
Det jag försöker göra är att hämta den senaste temperaturen från varje sensor.

Det närmsta jag har kommit är:

Kod: Markera allt

SELECT `sensor_id`, MAX(`reading_time`), `temperature` FROM temperature GROUP BY `sensor_id`;
Det funkar så långt som att jag har en rad för varje sensor med den senaste avläsningstiden, men temperaturvärdet är för en annan rad.
Någon som har koll på SQL och förstår vad jag menar?
Norberg
Inlägg: 130
Blev medlem: 13 januari 2006, 19:03:39
Kontakt:

Re: SQL Hämta senaste värdena från olika id

Inlägg av Norberg »

Denna borde peka dig i rätt riktning https://stackoverflow.com/questions/453 ... iple-times
davidi
Inlägg: 571
Blev medlem: 13 oktober 2011, 16:45:38
Ort: Ekerö

Re: SQL Hämta senaste värdena från olika id

Inlägg av davidi »

Är en subselect ok?

Kod: Markera allt

select t1.sensor_id, t1.reading_time, t1.temperature from temperature t1
join (select sensor_id, max(reading_time) maxr from temperature group by sensor_id) t2
on t1.sensor_id = t2.sensor_id and t1.reading_time = t2.maxr;
LarryXz
Inlägg: 641
Blev medlem: 13 mars 2013, 20:31:08
Ort: Norra Uppland

Re: SQL Hämta senaste värdena från olika id

Inlägg av LarryXz »

Tack så mycket båda två!
Hittade många inlägg på stackoverflow, men inget som passade mig. Men just den där hittade jag inte.
Nu funkar det som det ska.
nifelheim
Den första
Inlägg: 2318
Blev medlem: 27 mars 2008, 22:31:16
Ort: stockholm

Re: SQL Hämta senaste värdena från olika id

Inlägg av nifelheim »

Jag skulle läsa ut värdet med med tidsintervall fram till nutid,
när tidpunktsvariabeln $d1 är nutid får jag sista loggade värdet,
vid historiska tidpunkter den avläsning som är närmast.

"dt" innehåller tid för rapporterat värde och "meter" innehåller värdet.

Kod: Markera allt

SELECT dt,meter
  FROM ${elmatdb[$i]}
  ORDER BY abs(TIMESTAMPDIFF(second, dt, "$d1"))
  LIMIT 1
Jag har ingen aning om vad som är minst "krävande" men det är inget script som körs ofta :)
Skriv svar