webForumDet fria alternativet

Få ut föregående post

Databaser & SQLur Databashanterare & SQL

6 svar · 1 567 visningar · startad av ironhead

Medlem sedan mars 20011 346 inlägg
Frågan#1

Hej alla glada!

Har en tabell i MSSQL 2005 som ser ut såhär

ID, pri ident
Vecka, int
År, int
Info, nvarchar

År sparas endast med 2 siffror.

Om jag har id:t på en post, säg mitt i listningen. skulle jag vilja ha ut alla poster som är äldre än den jag står på.

pri,v,år,info
============
1, 50, 10, text1
2, 52, 10, text2
3, 2, 11, text3
[4, 5, 11, text4]<-
5, 6, 11, text5

Problemet är att om det är årsskifte blir vecka större än nuvarande vecka.
Kan man lösa det i frågan?

Medlem sedan maj 2000144 inlägg
#2

Nått sånt här kanske

create table #tmp
(
   ID int identity,
   vecka int,
   ar  int,
   info nvarchar(10)
)

insert into #tmp values (50, 10, 'text1')
insert into #tmp values (52, 10, 'text2')
insert into #tmp values (2, 11, 'text3')
insert into #tmp values (5, 11, 'text4')
insert into #tmp values (6, 11, 'text5')

select * from #tmp 
where (ar*100)+vecka < (11*100)+5
Medlem sedan aug. 20039 340 inlägg
#3

Jag skulle avråda dig från att lagra datum på det viset. Du kan tex lagra det som ett nummer i form av ÅÅÅÅMM. Men om du absolut måste göra som du gör, kan du göra t ex så här:

SELECT * 
FROM   tabell
WHERE  År <= (SELECT år FROM tabell WHERE id=42)
OR    (år = (SELECT år FROM tabell WHERE id=42) 
       AND vecka <= (SELECT vecka FROM tabell WHERE id=42) )
ORDER BY år DESC, vecka DESC

Går nog att få bort de fula sub-selectarna genom att hämta ut det datat i förväg.

Medlem sedan maj 2000144 inlägg
#4

nitro2k01 skrev:

Jag skulle avråda dig från att lagra datum på det viset. Du kan tex lagra det som ett nummer i form av ÅÅÅÅMM. Men om du absolut måste göra som du gör, kan du göra t ex så här:

SELECT * 
FROM   tabell
WHERE  År <= (SELECT år FROM tabell WHERE id=42)
OR    (år = (SELECT år FROM tabell WHERE id=42) 
       AND vecka <= (SELECT vecka FROM tabell WHERE id=42) )
ORDER BY år DESC, vecka DESC

Går nog att få bort de fula sub-selectarna genom att hämta ut det datat i förväg.

Nja du menar väl?

SELECT * 
FROM   tabell
WHERE  År < (SELECT år FROM tabell WHERE id=42)
OR    (år = (SELECT år FROM tabell WHERE id=42) 
       AND vecka <= (SELECT vecka FROM tabell WHERE id=42) )
ORDER BY år DESC, vecka DESC

:)

Medlem sedan aug. 20039 340 inlägg
#5

adde2: Tja, det beror ju på hur man tolkar frågan. Om man även vill få med posten "man står på" så får man göra som jag skrev.

Medlem sedan maj 2000144 inlägg
#6

din lösning tar även med framtida datum från samma år.

Medlem sedan mars 20011 346 inlägg
#7

Gjorde det enkelt för mig och slog ihop år och vecka

ex:

id, vecka, år, text
==================
1, 50, 10, text1 = 1050
2, 52, 10, text2 = 1052
3, 2, 11, text3 = 1102
[4, 5, 11, text4]<- = 1105
5, 6, 11, text5 = 1106

Då blev det genast enkelt att ta fram posten för den föregående veckan, även om det blev ett nytt år.

Tack för sparken i "rätt" riktning.

136 ms totalt · 3 externa anrop · v20260731065814-full.4bcf49fe
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)