---
title: "Fel datum och fel datatyp"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/73773-fel-datum-och-fel-datatyp"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Viktor"
published: "2003-04-11T09:28:38.000Z"
updated: "2003-05-02T20:15:07.000Z"
replies: 5
views: 308
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/73773-fel-datum-och-fel-datatyp"
---

# Fel datum och fel datatyp

## #1 — Viktor, 2003-04-11T09:28Z

2 frågor har jag.

Först,

När jag kör denna fråga

```
SELECT min(t.time) as best_time, t.id, t.driver_id, t.track_id, t.date, d.name as driver_name
FROM gp4_time t, gp4_driver d
WHERE d.id=t.driver_id
AND track_id=1
GROUP BY t.driver_id 
ORDER BY best_time
```

så får jag allt rätt, men t.date blir fel, det blir datumet för en annan post i tabellen gp4_time  :l 
Tabellen serut såhär,

```
gp4_time: id, driver_id, track_id, time, date
gp4_driver: id, name, password
```

Fråga 2,

t.time är en int(11), och det blir det också när jag hämtar den till mitt Java program, men när jag kör SQL satsen ovan så blir best_time en LongLong, varför? Kan man fixa så det också blir en int(11)?

/Viktor

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

## #2 — LarsG, 2003-04-11T14:21Z

Att du får fel svar beror på en felaktig design i Mysql. Den frågan du har ställt är inte korrekt (alla andra DBMS skulle ge fel). Alla kolumner i select-listan som inte ingår i en aggregatfunktion måste även ingå i group by. 

t.ex

A

A B C
\-------
1 2 3
1 4 5

```
select a,max(b),c from A group by A
```

Du förväntar dig att få

A B C
\-------
1 4 5

men du får

A B C
\-------
1 4 3

Det som händer är att Mysql tar första bästa värde för C inom varje grupp av A.  

För att få det resultat du vill ha så krävs stöd för subselect

```
select A,b,c from A A1
where b = (select max(b) from A where A = A1.A)
```

I mysql får man göra det i flera steg med hjälp av en temptabell. Det finnes ett avsnitt i dokumentationen som beskriver detta i detalj.

Att det blir longlong är konstiigt. Hjälper

```
SELECT cast(min(t.time) as int) as best_time
```

Att ange int(11) i tabelldefinition är också ett konstigt  påhitt i Mysql. 11:an har inget med vilka värden som går att lagra så den är rätt meningslös.

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

## #3 — Viktor, 2003-04-11T14:59Z

Kan inte prova cast ännu, måste updatera till MySQL 4 först...

> The CAST() and CONVERT() functions were added in MySQL 4.0.2

kör med 3.xx fortfarande.

Nu skäms jag lite :) Den första koden som jag postade hjälpte du till med i oktober/november förra året och då hade jag antagligen samma problem eftersom jag i det programmet har tagit bort datum ser jag nu när jag tittar efter :)

/Viktor

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

## #4 — Herman, 2003-04-11T15:27Z

I 4.1 kan du även använda sub-selects :)

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

## #5 — Viktor, 2003-05-02T20:01Z

Ok, en följdfråga.
Kan jag på något sätt få den den bästa av alla tider i resultatet i en egen kolumn som finns med alla resultat?

Typ,

```
|id|name  |bestTime|super_best_time|
---------------------------------------
|1 |Kalle |125     |125            |
|2 |Anka  |153     |125            |
|3 |Dalle |175     |125            |
```

Hoppas ni förstår vad jag menar :) Annars är det bara att fråga igen :)

/Viktor

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

## #6 — LarsG, 2003-05-02T20:15Z

Den kolumnen kan du väl lägga till i ditt java program.  (Nej, det går inte direkt i SQL-frågan utan skalära subselect.)

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/73773-fel-datum-och-fel-datatyp
