WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Hjälp med mysql fråga, selektivt urval av resultat (https://www.wn.se/forum/showthread.php?t=1041471)

najk 2010-04-12 08:32

Hjälp med mysql fråga, selektivt urval av resultat
 
Hej, jag försöker göra en sqlfråga men jag går bet på den.

Tabellen innehåller två värden, datum och position.
Det matas in värden i tabellen så ofta som möjligt, om allt funkar som det ska tre gånger per minut. Men det kräver att det finns gprs täckning, något det inte alltid gör så det kan gå en stund mellan inmatningarna, låt säga att i början av tabellen finns 5 värden som är nära varandra positions och tidsmässigt. Men sedan finns det en tid och position en bit bort för att följas med 14 positioner med kort tidsintervall.

För att få ut en bra visning på det vill man ju visa en av de 5 första positionerna, sen den positionen som är ensam och sen kanske två/tre av de sista 14 positionerna. Väljer man (som sidan gör idag) var 20:de position får man ju inte en så detaljerad bild, men har man oftare positioner blir det knökafullt med ballonger när den har bra täckning och således skickar positionerna oftare.

Så jag vill alltså beroende på differans från föregående tidpunkt i tabellen få ut nästa rad. Säg att om det är mindre än 10 minuters mellanrum struntar jag i uppdateringen men har det skiljt mer än 10 minuter vill jag ha raden.

Sqlfrågan ska implementeras här (för att få ytterligare förståelse om min beskrivning är otydlig): http://30000m.se/tracking/

Någon MySQL duktig person som kan peka mig i rätt riktning?

lubic 2010-04-12 09:32

Kommer på rak arm inte på hur du gör detta i SQL, dock borde du utan större problem kunna göra det innan du presenterar resultatet. Alltså i t.ex. din PHP-kod så plockar du ut alla rader och sen plottar du bara ut punkterna om det har en tillräckligt stor diff från föregående punkt. Nackdelen blir så klart att det kanske blir onödigt mycket data att "jobba" med om du har många mätningar. I så fall kanske någon annan har någon bra idé om hur du kan göra urvalet direkt i SQL.

Conny Westh 2010-04-12 11:12

Har testat lite med MS SQL-server, och har inte hunnit konvetrea till MySQL ännu menprincipen borde vara densamma:

Kod:

select *

FROM(

select posid, datum, 
(
        select top 1 datum
        from position p2
        where p2.datum < p1.datum
        order by 1 desc
)  as [bak],
(
        select top 1 datum
        from position p2
        where p2.datum > p1.datum+3
        order by 1 asc
)  as [fram]
from Position p1
) Tabpos
where fram > datum

Behövs givetvis lite mer logik men en start i alla fall...


yadis 2010-04-12 11:25

Kan du inte strunta i att spara postiionen om den är under 10 minuter gammal(jämfört med senaste sparade) istället? Underlättar ditt liv om du gör så istället:)

najk 2010-04-12 11:31

Nja, jag vill ju ha alla positioner, eftersom även om positionen är samma så kan höjden vara annorlunda. Dessutom vill man ju kunna ta fram en väldigt detaljerad resplan med så mycket data som möjligt sen. Men i "spårningsfasen" är det ju trevligare om man kan visa så som jag tänkt. Men får väl göra det i php, för jag får inte riktigt Connys lösning att funka heller. Även om det hade vart trevligare å göra det i MySQL direkt.

GuzZzt 2010-04-12 11:56

Jag skulle nog antingen som lubic säger lösa det i Php eller så skulle jag ta ut medel från mySQL grupperat på 10 minters interval. Då blir det jämnare med positioner.

najk 2010-04-12 12:58

Fan du e inte dum du, medelvärde var en interessant lösning.

Conny Westh 2010-04-14 16:02

Citat:

Ursprungligen postat av najk (Inlägg 20350827)
Nja, jag vill ju ha alla positioner, eftersom även om positionen är samma så kan höjden vara annorlunda. Dessutom vill man ju kunna ta fram en väldigt detaljerad resplan med så mycket data som möjligt sen. Men i "spårningsfasen" är det ju trevligare om man kan visa så som jag tänkt. Men får väl göra det i php, för jag får inte riktigt Connys lösning att funka heller. Även om det hade vart trevligare å göra det i MySQL direkt.

Mitt förslag var inte komplett, det behöver arbetas mer med innan det funkar, jag slängde ut det för att vara en inspiration till nya idéer. Behöver fundera mer över logiken innan den funkar...


Alla tider är GMT +2. Klockan är nu 11:56.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson