Seneste forumindlæg
Køb / Salg
 * Uofficiel Black/White liste V3
Login / opret bruger

Forum \ Programmering og webdesign \ Programmering
Denne tråd er over 6 måneder gammel

Er du sikker på, at du har noget relevant at tilføje?

Elmåler udlæsning fra SQL

Af Gæst freddy | 08-03-2018 12:04 | 8707 visninger | 8 svar, hop til seneste
Hej jeg har en MySQL tabel hvor min elmåler kommer ind. Jeg er bekendt med tiden kolonne "Time" og elmåleren værdi står i kolonne "KWh" Men hvordan finder jeg forbruget den sidste time ? er der nogen der har en god ide ? Time 1Kwhkwh ELM2Kwh [table]2018-03-08 11:56:5718093.152018-03-08 11:55:0318093.252018-03-08 11:53:0818093.362018-03-08 11:51:1418093.52018-03-08 11:49:1918093.612018-03-08 11:47:2518093.712018-03-08 11:45:3018093.812018-03-08 11:43:3618093.922018-03-08 11:41:4118094.062018-03-08 11:39:4718094.162018-03-08 11:37:5218094.272018-03-08 11:35:5818094.412018-03-08 11:34:0318094.522018-03-08 11:32:0918094.622018-03-08 11:30:1418094.722018-03-08 11:28:1918094.872018-03-08 11:26:2518095.042018-03-08 11:24:3018095.142018-03-08 11:22:3618095.252018-03-08 11:20:4118095.362018-03-08 11:18:4718095.492018-03-08 11:16:5218095.632018-03-08 11:14:5818095.742018-03-08 11:13:0318095.852018-03-08 11:11:0818095.95[/table]
--
Gæstebruger, opret dit eget login og få din egen signatur.
#1
BingoOnAmmo
Bruger
08-03-2018 13:29

Rapporter til Admin
Det er lidt svært at hjælpe når man ikke helt kan skille de andre sidste data fra hinanden. "2018-03-08 11:56:57" er vel tiden Hvordan er de sidste data inddelt "18093.15" Og hvofor tælder tallet ned af som tiden går ?
--
#2
Chucara
Maxi Nørd
08-03-2018 13:32

Rapporter til Admin
Du trækker KWh tallet fra starten af timen fra slutningen af timen, hvis det er en kumulativ serie. Så hvis: 17:00 43KWh 18:00 56KWh Er svaret for timen, der starter kl. 17 (56-43) = 13 KWh.
--
ASUS Z270 TUF Mk1 | 7700K | GTX 1080TI | 32GB 3000MHz | Fractal Define R5 | Samsung 960 EVO 1TB | PG279Q | 2xU2715H
#3
splazz
Super Nørd
08-03-2018 13:59

Rapporter til Admin
Der må være noget galt med det data du har lagt op. Det virker ikke korrekt at korrekt at forbruget falder som tiden går...
--
ASUS P8H67-M PRO B3 | Intel Core i5-2500 | Corsair XMS3 2x4 GB | Samsung EVO 850 250 GB | OCZ ModXStream Pro 600 W Synology DS214+ [4 TB]
#4
Kanser
Elitebruger
08-03-2018 14:01

Rapporter til Admin
Jeg undrer mig også lidt over tallene. Det er meget svært at læse din tabel ;) Men, du har vel et felt TIME og et felt KWH Det ligner lidt, at der logges med lidt under 2 minutters mellemrum ca. Dvs. du kan ikke være garanteret at have et timestamp der hedder 17:00:xx og 18:00:xx. Så tag første timestamp med 17:xx:xx og første med 18:xx:xx for ca. at beregne forbruget for timen 17-18. Giver det mening? Jeg sidder på job og er lidt træt, så måske er jeg helt ved siden af... :)
--
I5-4670k @ 4.5 GHz, MSI GTX 970 Gaming 4G
#5
inckie
Ultra Nørd
08-03-2018 20:00

Rapporter til Admin
Lav Time om til et timestamp eller datetime felt, så kan du hente alle rækker ud for en given periode således. SELECT * FROM `tabel` WHERE `Time` BETWEEN '2018-03-08 11:00:00' AND '2018-03-08 12:00:00'; Kan du ikke lige køre "DESCRIBE `tabel`" (hvor du bytter tabel ud med den rigtige navn på din tabel). Så vi sikre på din tabel struktur, eller endnu bedre, post et sample af din database.
--
Take everything you like seriously, except yourselves.
--
Sidst redigeret 08-03-2018 20:01
#6
ThomasHede
Ny på siden
09-03-2018 11:28

Rapporter til Admin
Hvis du har aflæsningerne som punkt aflæsninger, og ønsker et udtryk for det reelle forbrug, så skal du have fat i en LAG funktion (SQL Server), som automatisk kan beregne forskellene mellem to værdier, når dit datasæt er sorteret efter tid. Er det problem du reelt set forsøger på at løse: Tabel: Tid1 aflæsning1 Tid2 aflæsning2 Forbrug_tid2 = aflæsning1-aflæsning2 Hvis det er problemet skal du bruge noget der minder om den LAG funktion jeg nævnte tidligere, den findes så vidt jeg husker ikke i MySQL, men du kan simulere den som beskrevet her: https://stackoverflow.com[...] Herefter bliver din forespørgsel: SELECT Tid, "LAG FUNKTION OVER TID" FROM table WHERE 'Time' > x and 'Time' < y eller konverter tid til datetime (som foreslået tidligere) og brug nogle af de indbyggede datetime funktioner som f.eks. BETWEEN.
--
Sidst redigeret 09-03-2018 11:28
#7
ThomasHede
Ny på siden
09-03-2018 12:08

Rapporter til Admin
Update: Jeg tjekkede lige MySQL dokumentationen, og det viser sig at LAG er blevet implementeret: LAG(expr [, N[, default]]) [null_treatment] over_clause Returns the value of expr from the row that lags (precedes) the current row by N rows within its partition. If there is no such row, the return value is default. For example, if N is 3, the return value is default for the first two rows. If N or default are missing, the defaults are 1 and NULL, respectively. Så du kan bare bruge LAG(Aflæsning2) for at få værdien for den tidligere aflæsning, så længe du sorterer efter tid. Dvs. SELECT time, aflæsning - LAG(aflæsning) OVER w AS 'forbrug' FROM table WINDOW w AS (ORDER BY time); Så får du tid, forbrug. Så kan du selv begrænse det efter forskellige tidsintervaller.
--
Sidst redigeret 09-03-2018 12:09
#8
waaapeter123
Semi Supporter
09-03-2018 20:33

Rapporter til Admin
#0 Hvis du vil have det samlede forbrug inden for den sidste time kan du gøre sådan her: Hvis vi nu antager din tabel hedder "Power". SELECT SUM(Kwh) FROM Power WHERE Time > (NOW() - INTERVAL 1 HOUR) Metoden NOW() returnerer den nuværende DATETIME, du kan så vha. INTERVAL trække så mange timer eller dage fra efter hvor lang tid tilbage du vil have el forbruget fra.
--
ASRockZ77Extreme4|[email protected]|XMS3 8GB 1600 Mhz|GTX 1060 6GB|500R|Corsair TX650V2|GW2765|U2414H|T14

Opret svar til indlægget: Elmåler udlæsning fra SQL

Grundet øget spam aktivitet fra gæstebrugere, er det desværre ikke længere muligt, at oprette svar som gæst.

Hvis du ønsker at deltage i debatten, skal du oprette en brugerprofil.

Opret bruger | Login
NYHEDSBREV
Afstemning


ANNONCE