Avatar billede richardsen Juniormester
13. marts 2014 - 00:38 Der er 7 kommentarer og
1 løsning

Hvordan selecter man seneste record ved timestamp

Har en tabel SOLTEST I ORACLE 11G

DATO TIMESTAMP
PRODUCED NUMBER

68    12-09-19 22:30:00,000000    10,622
69    12-09-19 22:40:00,000000    10,622
70    12-09-19 22:50:00,000000    10,622
71    12-09-19 23:00:00,000000    10,622
72    12-09-19 23:10:00,000000    10,622
73    12-09-19 23:20:00,000000    10,622
74    12-09-19 23:30:00,000000    10,622
75    12-09-20 02:00:00,000000    0
76    12-09-20 02:10:00,000000    0
77    12-09-20 02:20:00,000000    0
78    12-09-20 02:30:00,000000    0
79    12-09-20 02:40:00,000000    0
80    12-09-20 02:50:00,000000    0
81    12-09-20 03:00:00,000000    0

hvordan SELECT'er jeg max(timestamp) og produced så jeg kun får 1 record pr. dag.

23:30 er ikke altid det senest loggede tidspunkt.

Det drejer sig i al sin enkelthed om solcelleproduktion, som jeg gerne vil have ind i databasen, men kun produktionen pr. døgn.

Jeg har prøvet at definere dato som date og som timestamp, men er ikke blevet meget klogere.

Er der nogen kloge hoveder der har et forslag ?
Avatar billede jakobdo Ekspert
13. marts 2014 - 08:02 #1
Et hurtigt bud kunne være noget i stil med:

SELECT max(dato),produced FROM `soltest` GROUP BY DATE(dato)
Avatar billede Slettet bruger
13. marts 2014 - 08:50 #2
Kan skrive sådan:

select trunc(Dato,'DD'), sum(Produced)
from tabel
group by trunc(Dato,'DD')

eller

select to_char(Dato,'YYYYMMDD'), sum(Produced)
from tabel
group by to_char(Dato,'YYYYMMDD')
Avatar billede richardsen Juniormester
13. marts 2014 - 15:16 #3
Alle 3 forslag summerer PRODUCED, men PRODUCED er en sum i sig selv. (Daglig akkumuleret).

Derfor ønsker jeg kun at selecte den sidst loggede timestamp og PRODUCED værdi for hver dag.
Avatar billede Slettet bruger
13. marts 2014 - 16:53 #4
Ok - prøver igen:

Select dato, produced
From (
Select dato,produced
,row_number() over(partition by trunc(dato)
Ordre by dato desc) nr
)
Where nr = 1
Avatar billede richardsen Juniormester
13. marts 2014 - 17:51 #5
Bortset fra  tastefejlen "ordre"-"order" får jeg en fejlbesked :

FROM nøgleord er ikke fundet i den forventede position.

Ellers ser det spændende ud.
Avatar billede Slettet bruger
13. marts 2014 - 18:25 #6
Max kan vel være nok hvis produced aldrig er nagativ:
Kan skrive sådan:

select trunc(Dato,'DD'), max(Produced)
from tabel
group by trunc(Dato,'DD')
Avatar billede richardsen Juniormester
13. marts 2014 - 18:37 #7
Bingo

Produced kan ikke være negativ

Hvor svært kan det være ? :-)

Det irriterer mig bare at jeg ikke selv kunne se det.

Mange tak for hjælpen og send lige et svar.
Avatar billede Slettet bruger
13. marts 2014 - 21:37 #8
Her er lige et svar ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester