---
title: "Få ut föregående post"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/186419-få-ut-föregående-post"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "ironhead"
published: "2011-03-15T15:21:38.000Z"
updated: "2011-03-21T15:13:17.000Z"
replies: 6
views: 1597
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/databaser-sql/186419-få-ut-föregående-post"
---

# Få ut föregående post

## #1 — ironhead, 2011-03-15T15:21Z

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?

Permalänk: https://www.webforum.nu/p/186419

## #2 — adde2, 2011-03-16T19:06Z

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

Permalänk: https://www.webforum.nu/p/2272779

## #3 — nitro2k01, 2011-03-16T19:43Z

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.

Permalänk: https://www.webforum.nu/p/2272785

## #4 — adde2, 2011-03-16T19:53Z

> **[nitro2k01 skrev:](https://www.webforum.nu/p/1531319)**
>
> 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
```

 :)

Permalänk: https://www.webforum.nu/p/2272788

## #5 — nitro2k01, 2011-03-18T16:46Z

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.

Permalänk: https://www.webforum.nu/p/2272924

## #6 — adde2, 2011-03-18T17:34Z

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

Permalänk: https://www.webforum.nu/p/2272932

## #7 — ironhead, 2011-03-21T15:13Z

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.

Permalänk: https://www.webforum.nu/p/2273036

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/186419-få-ut-föregående-post
