Gå til innhold

Telle til forrige med samme verdi.


Anbefalte innlegg

Skrevet

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.

Videoannonse
Annonse
Skrevet

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

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

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

Skrevet

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.

Skrevet
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

Skrevet

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

Skrevet (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 :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
Skrevet

Du kommer jo med nye opplysninger hele tiden. Hvorfor ikke komme med alle detaljene i utgangspunktet, så vi slipper å synse?

 

Werner

Skrevet (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 av kjaa
Skrevet (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 av zY8pKPhR8XLJ
Skrevet
Festlig oppgave.

 

Har brukt MSSQL, håper det er greit.

 

Erm. Ok, Access. Heh.

 

Jepp. Denne kan jeg gjøre om.

Takk for hjelpen.

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

Skrevet (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 av zY8pKPhR8XLJ
Skrevet

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... ;)

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