Gå til innhold

Telle til forrige med samme verdi.


Anbefalte innlegg

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
Videoannonse
Annonse

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
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

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
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

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 :p

Lenke til kommentar
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 :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 av kjaa
Lenke til kommentar
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 av kjaa
Lenke til kommentar

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 av zY8pKPhR8XLJ
Lenke til kommentar
Fint å gange år med 52 når noen år har 53 uker (ca hvert 5. år) :p

 

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
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 av zY8pKPhR8XLJ
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...