FAQ |
Kalender |
2010-04-12, 08:32 | #1 | |||
|
||||
Har WN som tidsfördriv
|
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? |
|||
Svara med citat |
2010-04-12, 09:32 | #2 | ||
|
|||
Medlem
|
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.
|
||
Svara med citat |
2010-04-12, 11:12 | #3 | ||
|
|||
Klarade millennium-buggen
|
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... Senast redigerad av Conny Westh den 2010-04-12 klockan 11:55 |
||
Svara med citat |
2010-04-12, 11:25 | #4 | ||
|
|||
Medlem
|
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
|
||
Svara med citat |
2010-04-12, 11:31 | #5 | |||
|
||||
Har WN som tidsfördriv
|
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.
|
|||
Svara med citat |
2010-04-12, 11:56 | #6 | ||
|
|||
Nykomling
|
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.
|
||
Svara med citat |
2010-04-12, 12:58 | #7 | |||
|
||||
Har WN som tidsfördriv
|
Fan du e inte dum du, medelvärde var en interessant lösning.
|
|||
Svara med citat |
2010-04-14, 16:02 | #8 | ||
|
|||
Klarade millennium-buggen
|
Citat:
Senast redigerad av Conny Westh den 2010-04-14 klockan 16:21 |
||
Svara med citat |
Svara |
|
|