---
title: "Hämta närliggande id-nummer"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/62888-hämta-närliggande-id-nummer"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "ampy"
published: "2002-12-22T14:02:52.000Z"
updated: "2002-12-31T17:19:21.000Z"
replies: 16
views: 384
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/62888-hämta-närliggande-id-nummer"
---

# Hämta närliggande id-nummer

## #1 — ampy, 2002-12-22T14:02Z

Om det tex ser ut så här i en kolumn:

1
3
8
**12**
25
27

Och jag har värde 12 i ett variabel. Hur gör jag nu för att hämta de närliggande id-nummer som ligger precis efter och precis före? Alltså i detta fall vill jag få ut 8 och 25. 

Hur gör man detta med en sql-sats?

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

## #2 — niko, 2002-12-22T14:18Z

Kanske finns nåt enklare men kommer inte på nåt ..

```
select top 1 id from tbl where id<x order by id desc union select top 1 id from tbl where id>x order by id
```

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

## #3 — ampy, 2002-12-22T14:19Z

Just det, glömde nämna att det gäller MySQL.
Då funkar väl inte top?

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

## #4 — niko, 2002-12-22T14:27Z

Nä, men det går ju att ersätta med LIMIT. Vad som är värre är att UNION bara funkar from 4.0.0. Kör du inte den så har jag nog ingen riktigt bra lösning förutom att lösa det i ASP/PHP-koden (eller vad du nu kör).

Kanske nån annan som vet?

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

## #5 — LarsG, 2002-12-27T17:00Z

Om du inte kan använda union så får du ställa två frågor

```
select min(id) from t where id > 12

select max(id) from t where id < 12
```

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

## #6 — ampy, 2002-12-27T18:11Z

Hur gör man om man kan använda union då?

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

## #7 — LarsG, 2002-12-27T18:22Z

Så

select min(id) from t where id \> 12
union
select max(id) from t where id \< 12

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

## #8 — ampy, 2002-12-27T23:02Z

Jag har nu skrivit så här:

```
	sql = 	"select min(id_trad) from forum_topics where id_trad > "&strDatat(1,0)&" " & _
		"union " & _
		"select max(id_trad) from forum_topics where id_trad < "&strDatat(1,0)&""
	set rs = connect.execute(sql)
	
	response.write rs(0) & "-" 
	response.write rs(1)

	set rs = nothing
```

Då får jag felmeddelandet:

```
Microsoft OLE DB Provider for ODBC Drivers (0x80040E09)
[TCX][MyODBC]You have an error in your SQL syntax near 'union select max(id_trad) from forum_topics where id_trad < 3' at line 1
```

Varför?

strDatat(1,0) innehåller ett värde. Har kollat det.

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

## #9 — LarsG, 2002-12-28T17:27Z

Då har du nog en version av mysql som inte stöder union.

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

## #10 — ampy, 2002-12-28T17:28Z

Hur kolllar man upp vilken version man har?

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

## #11 — niko, 2002-12-28T17:39Z

```
mysqld -V
```

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

## #12 — ampy, 2002-12-29T20:57Z

Vart ska man skriva det?

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

## #13 — ampy, 2002-12-29T21:36Z

Har gjort så här nu:

```
sql = 	"select min(senasteinlagg), id_trad from forum_topics where senasteinlagg > '"&strDatat(33,0)&"' AND rum = "&rum&""
```

Då får jag felmeddelandet:

```
TCX][MyODBC]Mixing of GROUP columns (MIN(),MAX(),COUNT()...) with no GROUP columns is illegal if there is no GROUP BY clause
```

Varför?

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

## #14 — Jörgen HP, 2002-12-29T21:48Z

mysql vill ha med group by när du använder en aggregat funktion. Du kan läsa mer här:
<http://www.mysql.com/doc/en/Group_by_functions.html>

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

## #15 — ampy, 2002-12-29T21:57Z

Kom på att jag inte alls vill hämta det närmaste ID:t utan jag vill hämta id:et från närmaste tiden:

databasen ser ut så här:
\--ID--------Datum-------------
\| 2 \| 2002-12-31 11:00:00 \|
\| 1 \| 2002-12-31 12:00:00 \| 
\| 3 \| 2002-12-31 10:00:00 \|
\| 4 \| 2002-12-31 08:00:00 \|
\| 5 \| 2002-12-31 09:00:00 \|

Om vi nu har id-nummer 3 i en variabel, hur ska vi då får ut 2 och 5 genom att hämta den tiden som ligger närmast?

Strulade lite
Lars

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

## #16 — LarsG, 2002-12-31T16:51Z

Id för närmast mindre tid

```
select t1.* from topics t1 inner join topics t2 
  on t1.datum < t2.datum 
where t2.id = 3
order by t1.datum desc
limit 1
```

Id för närmast större tid

```
select t1.* from topics t1 inner join topics t2 
  on t1.datum > t2.datum 
where t2.id = 3
order by t1.datum asc
limit 1
```

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

## #17 — ampy, 2002-12-31T17:19Z

Tack!  :bire

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/62888-hämta-närliggande-id-nummer
