kjaa Skrevet 21. april 2008 Del Skrevet 21. april 2008 Hei. Jeg sliter litt med en spørring i Access. Jeg har en tabell som heter "tblResultat". Postene er "res" og "uke" Det jeg ønsker er å finne ut hvor mange uker det er siden forrige gang feks "1" ble lagt inn. Har prøvd flere varianter, men det eneste jeg får er antall ganger "1" er lagt til. Er meget takknemlig om noen har en løsning. Lenke til kommentar
___ Skrevet 21. april 2008 Del Skrevet 21. april 2008 Problemstillingen din er veldig uklar, spør du meg. Jeg klarer ikke helt å forstå hva du ønsker hjelp til. Istedet for å fortelle at du "har prøvd flere varianter", hva med å gi oss eksempler på disse "variantene"? Kom med en forståelig tabelldefinisjon, gjerne med eksempel på hva tabellen inneholder, så skal vi kanskje greie å hjelpe deg. Werner Lenke til kommentar
kjaa Skrevet 21. april 2008 Forfatter Del Skrevet 21. april 2008 Problemstillingen din er veldig uklar, spør du meg. Jeg klarer ikke helt å forstå hva du ønsker hjelp til. Istedet for å fortelle at du "har prøvd flere varianter", hva med å gi oss eksempler på disse "variantene"? Kom med en forståelig tabelldefinisjon, gjerne med eksempel på hva tabellen inneholder, så skal vi kanskje greie å hjelpe deg. Werner Ja. Den er litt vrien. Hvis jeg i uke 2,6,18,26,30 feks legger inn verdien 1 og i de andre ukene i løpet av et år legger jeg inn 2,3,4,5. Jeg ønsker å lage en sql kode som teller antall uker det er mellom hver gang jeg registrerer 1. Håper dette ble litt bedre forklart. Lenke til kommentar
blackbrrd Skrevet 21. april 2008 Del Skrevet 21. april 2008 Mellom hver gang du har registrert res=1 eller mellom nå og sist gang? Lenke til kommentar
kjaa Skrevet 22. april 2008 Forfatter Del Skrevet 22. april 2008 Mellom hver gang du har registrert res=1 eller mellom nå og sist gang? Hei. Mellom nå og sist gang er det jeg er ute etter. Lenke til kommentar
blackbrrd Skrevet 22. april 2008 Del Skrevet 22. april 2008 select date_part(now(), 'Week')-max(week) where res = 1 Eneste jeg er litt usikker på er date_part funksjonen, men det burde ikke være så vanskelig å finne ut av. Syntaxen ovenfor er for postgresql. select date_part(now(), 'Week')-max(week) where res = 1 Eneste jeg er litt usikker på er date_part funksjonen, men det burde ikke være så vanskelig å finne ut av. Syntaxen ovenfor er for postgresql. Lenke til kommentar
___ Skrevet 22. april 2008 Del Skrevet 22. april 2008 select date_part(now(), 'Week')-max(week) where res = 1 Eneste jeg er litt usikker på er date_part funksjonen, men det burde ikke være så vanskelig å finne ut av. Syntaxen ovenfor er for postgresql. select date_part(now(), 'Week')-max(week) where res = 1 Eneste jeg er litt usikker på er date_part funksjonen, men det burde ikke være så vanskelig å finne ut av. Syntaxen ovenfor er for postgresql. En svakhet her er jo at man ikke tar hensyn til år. Werner Lenke til kommentar
blackbrrd Skrevet 22. april 2008 Del Skrevet 22. april 2008 Jepp, men det var jo ikke nevnt noe om noen år-kolonne i spørsmålet heller Det er jo også litt fubar å bruke uker til slikt, ettersom: The number of the week of the year that the day is in. By definition (ISO 8601), the first week of a year contains January 4 of that year. (The ISO-8601 week starts on Monday.) In other words, the first Thursday of a year is in week 1 of that year. (for timestamp values only) Because of this, it is possible for early January dates to be part of the 52nd or 53rd week of the previous year. For example, 2005-01-01 is part of the 53rd week of year 2004, and 2006-01-01 is part of the 52nd week of year 2005. Med andre ord, hvis du skal lagre uke/år hver for seg for datoen 01.01.2006, så blir det week=52, year=2005 :p Lenke til kommentar
kjaa Skrevet 22. april 2008 Forfatter Del Skrevet 22. april 2008 (endret) Med andre ord, hvis du skal lagre uke/år hver for seg for datoen 01.01.2006, så blir det week=52, year=2005 :p Hei og takk for svar. Tabellen ser slik ut: id uke res år 1 2 1 2008 2 3 3 2008 3 4 5 2008 4 5 1 2008 Her er 1 reg i uke 4 og i uke 1. Jeg ønsker å finne antall uker det er mellom de to. Håper dette er ok forklart. Endret 22. april 2008 av kjaa Lenke til kommentar
blackbrrd Skrevet 22. april 2008 Del Skrevet 22. april 2008 Tatt høyde for at for f.eks datoen 01.01.2006, så blir det week=52, year=2005? At det er 53 uker i noen år? Lenke til kommentar
___ Skrevet 23. april 2008 Del Skrevet 23. april 2008 Du kommer jo med nye opplysninger hele tiden. Hvorfor ikke komme med alle detaljene i utgangspunktet, så vi slipper å synse? Werner Lenke til kommentar
Manfred Skrevet 23. april 2008 Del Skrevet 23. april 2008 Er du ikke synsk heller nå da? Lenke til kommentar
kjaa Skrevet 23. april 2008 Forfatter Del Skrevet 23. april 2008 (endret) Du kommer jo med nye opplysninger hele tiden. Hvorfor ikke komme med alle detaljene i utgangspunktet, så vi slipper å synse? Werner Hvilke nye opplysninger? Det nye er at jeg la ved tabellen. Den er helt lik det som er beskrevet først. Dato og årstall er ubetydelig her her. Tabellen heter tblResultat og posten heter res. I posten er verdiene: 1.3.5.3.2.5.4.4.1.2.4.5..osv Ett tall tilsvarer en uke. Hvor mange tall (uker) er det mellom ettallene? Endret 23. april 2008 av kjaa Lenke til kommentar
Kul drittunge Skrevet 23. april 2008 Del Skrevet 23. april 2008 (endret) Festlig oppgave. Har brukt MSSQL, håper det er greit. create table #temp ( w int identity (1,1) , val int , y int default (2008) ) insert into #temp ( val ) select 1 union all select 3 union all select 5 union all select 1 insert into #temp ( val , y ) select 1, 2009 union all select 5, 2009 select * , row_number () over (partition by val order by y asc, w asc) as nInSerie into #temp2 from #temp t ;with crawler as ( select * , 0 as diff from #temp2 where 0 = 0 and nInSerie = 1 union all select t2.* , case when (t2.y - c.y) > 0 then cast ((t2.y - c.y) * 52 + (t2.w - c.w) as int) else cast ((t2.w - c.w) as int) end as diff from #temp2 t2 inner join crawler c on c.nInSerie = t2.nInSerie - 1 and c.val = t2.val ) select * from crawler where 0 = 0 and diff <> 0 drop table #temp drop table #temp2 w val y nInSerie diff----------- ----------- ----------- -------------------- ----------- 6 5 2009 2 55 4 1 2008 2 3 5 1 2009 3 53 (3 row(s) affected) Erm. Ok, Access. Heh. Endret 23. april 2008 av zY8pKPhR8XLJ Lenke til kommentar
kjaa Skrevet 23. april 2008 Forfatter Del Skrevet 23. april 2008 Festlig oppgave. Har brukt MSSQL, håper det er greit. Erm. Ok, Access. Heh. Jepp. Denne kan jeg gjøre om. Takk for hjelpen. Lenke til kommentar
blackbrrd Skrevet 23. april 2008 Del Skrevet 23. april 2008 Fint å gange år med 52 når noen år har 53 uker (ca hvert 5. år) Lenke til kommentar
Kul drittunge Skrevet 23. april 2008 Del Skrevet 23. april 2008 Fint å gange år med 52 når noen år har 53 uker (ca hvert 5. år) Jeg er vel ikke veldig overrasket over at noen kom med det argumentet, nei. Det er forskjell på nummer på uken og ukenummer. Forskjellen består i at det finnes kun 52 uker i et år, mens ukenummer 53 er et fiktivt nummer for kalenderen. Med andre ord er det null problemer å ignorere at kalenderen sier at en uke har ukenummer 53, og bare sette inn uker fra og med 1 til og med 52 i tabellen. Lenke til kommentar
blackbrrd Skrevet 23. april 2008 Del Skrevet 23. april 2008 (endret) Vel, isåfall så bør du være obs på at f.eks 29.12.2008 og 01.01.2008 begge har ukenr 1. Endret 23. april 2008 av blackbrrd Lenke til kommentar
Kul drittunge Skrevet 23. april 2008 Del Skrevet 23. april 2008 (endret) Vel, isåfall så bør du være obs på at f.eks 29.12.2008 og 01.01.2008 begge har ukenr 1. Joda, men nå er det jo valgt at oppløsningen på tidsforskjellen kun skal regnes opp til hele uker, og ettersom dette gir en eller flere dagers unøyaktighet i 41 av 49 ukesammenligninger, så skader det ikke å bare sett ukenummer 53 til nummer på uka 1. Selv hadde jeg valgt yearday istedenfor week, men er det ikke viktig så er det ikke viktig. Endret 23. april 2008 av zY8pKPhR8XLJ Lenke til kommentar
blackbrrd Skrevet 24. april 2008 Del Skrevet 24. april 2008 Det som faktisk hadde fungert er å istedetfor å lagre ukenr så lagrer du dato, spesifikt første dagen i uka. Da kan man trekke de to datoene fra hverandre og dele resultatet på 7, så får man korrekt antall uker... Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå