Avatar billede djthomsen Nybegynder
21. februar 2011 - 16:16 Der er 13 kommentarer og
1 løsning

Finde laveste værdi på tværs af kolonner og rækker

Jeg har en tabel der indeholder daglige og ugentlige UNIX timestamps for brugere.

Tabellen er opbygget af følgende kolonner:

user (Primary)
week1_day1
week1_day2
...
week1_day7
Week1_week
week2_day1
...
osv

Det jeg ønsker at finde er de 10 laveste daglige timestamps. Altså blandt dem der hedder weekX_dayX. Det er ikke et problem for at mig at få de 10 laveste for den enkelte dag. Men søger den laveste over ALLE dagene.

Samme gælder ugerne. Ønsker at finde det laveste ugentlige (weekX_week) timestamp på tværs af alle de ugentlige kolonner der eksistere. Altså hver 8 kolonne.

Håber virkelig nogen kan hjælpe for ved sku ikke lige hvad jeg skal gøre for at søge bredt over hele tabellen. Og især ikke at udelukke enkelte kolonner.

På forhånd tak for hjælpen.
Avatar billede arne_v Ekspert
21. februar 2011 - 16:33 #1
To muligheder:

1) find de 10 mindste i hver kolonne (nemt med MIN) og lad din applikation finde de 10 mindste samlet

2) drop den dårlige database struktur og lav om til

user
week
day
val

så er opgaven supernem at løse.
Avatar billede djthomsen Nybegynder
21. februar 2011 - 16:36 #2
Kan du lige forklare den struktur du har forslået?
Avatar billede arne_v Ekspert
21. februar 2011 - 16:43 #3

user week1_day1 week1_day2 ... week52_day7
A    1          2          ... 3
B    4          5          ... 6


->


user week day val
A    1    1  1
A    1    2  2
...
A    52  7  3
B    1    1  4
B    1    2  5
...
B    52  7  6
Avatar billede djthomsen Nybegynder
21. februar 2011 - 16:52 #4
Kan godt se at det stiller tingene lettere op :)

Men bliver det ikke noget besværligt noget når der hele tiden kommer nye uger? og brugere. En ny uge betyder jo 8 (inkl. den ugentlige opsamling) * 100 = 800 ny rækker. Ved 100 brugere, hvilket jeg håber på bliver til mange flere!

Findes der nogen simpel måde at tilføje 8 ekstra rows per bruger?
Avatar billede arne_v Ekspert
21. februar 2011 - 16:59 #5
Tværtimod. Det er ret nemt at tilføje flere rækker. Det er meget problematisk at tilføje nye kolonner.

Du skal nok også have en year kolonne for at kunne klare årsskift.
Avatar billede arne_v Ekspert
21. februar 2011 - 17:03 #6
Hvis vi siger at user fylder 10 tegn så fylder en række 22 bytes (plus overhead).

10000 brugere x 10 år x 365 dage x 22 bytes = 800 MB (plus overhead)

Kan du huske dengang man målte harddisk størrelser i MB?  :-)
Avatar billede djthomsen Nybegynder
21. februar 2011 - 17:07 #7
Findes der et hurtigt kode-eksempel du kan smide op? Som viser den række oprettelse der kræves per bruger?

Så tror jeg at vi ville være helt i mål :)
Avatar billede djthomsen Nybegynder
21. februar 2011 - 17:56 #8
Har nu lavet databasen om via excel. Men den vil ikke uploade, da jeg får duplicate rows error fordi jeg har samme username flere gange?!
Avatar billede djthomsen Nybegynder
21. februar 2011 - 18:22 #9
Havde selvfølgelig bare glemt at username var primary, så opdaterede med id som primary og så duede det ligesom...

Men studser stadig over hvilken kode der kan skabe de nødvendige rækker når en ny uge starter.
Avatar billede arne_v Ekspert
21. februar 2011 - 21:05 #10
du skal vel have 2 for løkker - en over brugerne og en 1..7 - som laver en INSERT
Avatar billede sifuentes Nybegynder
21. februar 2011 - 21:50 #11
I stedet for to felter, week og day, skal der kun bruges et felt: Dato, udfra dette kan ugedag, ugenummer, helligdag, arbejdsdag, weekend m.m. udregnes på grundlag af dato i en forespørgsel. Datoen behøver man ikke ikke selv indtastes, den kan indstilles til default at være d.d. Brugeren kan indtastes(vælges fra et listefelt med initialer, fornavn, efternavn, afd m.m. og kan ved manuelt indskrives dersom brugeren ikke allerede er indtastet. Datofeltet kan endvidere korigeres ved at taste h.h.v. + og minus, så jeg kan ikke rigtig se hvorfor det skulle være så meget mere besværligt? Desuden indsætter tastekombinationen "CTRL" + "'" feltværdien fra foregående post.(så vidt jeg husker)
Avatar billede djthomsen Nybegynder
22. februar 2011 - 15:15 #12
arne_v

Lavede strukturen om og nu køre det en HEL del bedre...

Mange tak for hjælpen!

Kan du oprette svar så du kan få points?
Avatar billede arne_v Ekspert
22. februar 2011 - 15:23 #13
svar
Avatar billede arne_v Ekspert
27. marts 2011 - 04:31 #14
saa mangler du bare at acceptere
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