---
title: "Hämta högsta värdena för respektive användare?"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/178485-hämta-högsta-värdena-för-respektive-användare"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "inspiro"
published: "2009-05-10T22:11:27.000Z"
updated: "2009-05-12T18:14:15.000Z"
replies: 13
views: 763
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/178485-hämta-högsta-värdena-för-respektive-användare"
---

# Hämta högsta värdena för respektive användare?

## #1 — inspiro, 2009-05-10T22:11Z

Hej! Jag har följande tabell:

```
------------------------
TabellID | UserID | Value
1          1         10      
2          2         20
3          1         40
4          3         15
5          1         60
6          2         30
```

Nu önskar jag hämta ut varje användares högsta värde och det kan man ju förstås göra med MAX(Value). Problemet är att jag också måste få tag på TabellID och använder man MAX så måste man ju gruppera och då fungerar det inte? Vill alltså få fram följande ur datat ovan:

```
------------------------
TabellID | UserID | Value
4           3          15
5           1          60
6           2          30
```

Kör sql server 2005.

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

## #2 — Melea, 2009-05-11T06:54Z

```
SELECT
   TabellID,
   UserID,
   MAX(Value)
FROM
   tbl
GROUP BY
   UserID
```

Borde göra susen?
Annars kan du testa

```
SELECT
   TabellID,
   DISTINCT(UserID),
   Value
FROM
   tbl
GROUP BY
   Value
Order By
   Value
```

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

## #3 — inspiro, 2009-05-11T06:58Z

Hej och tack för svar. Nej, det är det som inte funkar... jag kan inte ha med TabellID om jag inte samtidigt har med tabellid i group by. Men eftersom tabellid är unikt så kommer ju varje tabellid att bli en grupp istället för userid!

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

## #4 — LarsG, 2009-05-11T07:30Z

```
select TabellID,
        UserID,
        Value
  from tbl as t
 where value =
     (select max(value)
        from tbl
       where tbl.userid = t.userid)
```

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

## #5 — Melea, 2009-05-11T07:33Z

Jag fortsätter experimentera lite.

```
SELECT
   TabellID,
   UserID,
   Value 
FROM
   tbl t1
WHERE
   Value = (
   SELECT
      MAX(Value)
   FROM
      tbl t2
   WHERE
      t2.UserID = t1.UserID
   )
```

**/r** doh, LarsG hann före.

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

## #6 — inspiro, 2009-05-11T08:09Z

Toppen, tackar! En följdfråga dock, om samma användare har två exakt samma värden så kommer båda med, går det att bara få med sig ett av dem (exempelvis med hjälp av senast datum som också finns i tabellen)?

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

## #7 — Melea, 2009-05-11T11:43Z

Testa

```
SELECT
   TabellID,
   UserID,
   Value 
FROM
   tbl t1
WHERE
   Value = (
   SELECT
      MAX(Value)
   FROM
      tbl t2
   WHERE
      t2.UserID = t1.UserID
   LIMIT
      1
   )
```

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

## #8 — @nders, 2009-05-11T11:47Z

Nej, testa inte det. Limit fungerar ju inte i SQL Server. Dessutom hade det inte gett något resultat eftersom max ändå bara returnerar ett värde. 

Räcker det inte med att köra SELECT DISTINCT?

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

## #9 — Melea, 2009-05-11T11:50Z

> **[@nders skrev:](https://www.webforum.nu/p/1467514)**
>
> Nej, testa inte det. Limit fungerar ju inte i SQL Server. Dessutom hade det inte gett något resultat eftersom max ändå bara returnerar ett värde. 
> 
> Räcker det inte med att köra SELECT DISTINCT?

Visste jag inte, tack. :)
Borde det inte funka med GROUP BY UserID?

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

## #10 — @nders, 2009-05-11T11:59Z

> **[Melea skrev:](https://www.webforum.nu/p/1467516)**
>
> Visste jag inte, tack. :)
> Borde det inte funka med GROUP BY UserID?

Nej, du måste gruppera på alla fält som inte är beräknade.

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

## #11 — inspiro, 2009-05-11T13:59Z

> **[@nders skrev:](https://www.webforum.nu/p/1467514)**
>
> Räcker det inte med att köra SELECT DISTINCT?

Nej, distinct fungerar inte eftersom det kan vara unika poster - samma userid och value men olika tabellid (och olika datum från ett datumfält som också finns i tabellen, när datumet gått ut kan man nämligen lägga in en ny post med samma värde).

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

## #12 — @nders, 2009-05-11T14:01Z

Ok, jag fattade nog inte riktigt hur det hängde ihop. Sorry.

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

## #13 — Peter S, 2009-05-11T14:03Z

```
select TabellID,
        UserID,
        Value
  from tbl as t
 where value =
     (select max(value)
        from tbl
       where tbl.userid = t.userid)
   and <datum> = 
     (select max(<datum>)
        from tbl
       where tbl.userid = t.userid)
```

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

## #14 — inspiro, 2009-05-12T18:14Z

Toppen, tack! Fungerar perfekt!  :D Hittade även ett alternativt sätt med join som om jag förstod det rätt ska vara lite snabbare än en sub query. Principen .r denna:

```
select f.type, f.variety, f.price
from (
   select type, min(price) as minprice
   from fruits group by type
) as x inner join fruits as f on f.type = x.type and f.price = x.minprice;
```

Länk: <http://www.xaprb.com/blog/2006/12/07/how-to-select-the-firstleastmax-row-per-group-in-sql/>

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/178485-hämta-högsta-värdena-för-respektive-användare
