---
title: "Group"
type: "forum-thread"
url: "https://www.webforum.nu/amne/databaser-sql/71219-group"
topic: "Databaser & SQL"
topic_url: "https://www.webforum.nu/amne/databaser-sql"
author: "Kristianstad"
published: "2003-03-16T12:12:02.000Z"
updated: "2003-03-22T09:30:06.000Z"
replies: 21
views: 366
page: 1
pages: 2
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/71219-group"
---

# Group

_Sida 1 av 2._

## #1 — Kristianstad, 2003-03-16T12:12Z

\|sID\|Tid\|Plats
\|Abc\|2003-03-16 10:03:02\|sida1.asp
\|Abc\|2003-03-16 10:03:08\|sida9.asp
\|Abc\|2003-03-16 10:03:20\|default.asp
\|Def\|2003-03-16 10:03:02\|sida1.asp
\|Abc\|2003-03-16 10:03:09\|default.asp

En sql-fråga skall få det att skriva ut:
Abc - default.asp - 2003-03-16 10:03:20
Def - sida1.asp - 2003-03-16 10:03:02

Den skall alltså "gruppera" sID och sedan ta den Plats där Tid är senast.
Jag testade med

```
SELECT sID, Tid, Plats FROM Tabell group by sID ORDER BY Tid DESC
```

, men den tar inte det värde där Tid är senast.

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

## #2 — LarsG, 2003-03-16T14:27Z

```
SELECT sID, Tid, Plats 
FROM Tabell t
where tid in (
select max(tid)
  from tabell
 where sid = t.sid)
```

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

## #3 — Kristianstad, 2003-03-16T19:20Z

Hej! :)

> \[TCX\]\[MyODBC\]Du har något fel i din syntax nära 'select max(tid) from Online where sid = t.sid)' på rad 1

Vad är det som är galet?

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

## #4 — LarsG, 2003-03-16T19:58Z

Visst ja, du använder Mysql.  Det går inte med en fråga så länge dom inte har stöd för subselect.

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

## #5 — Kristianstad, 2003-03-16T20:05Z

Finns det inte något sätt att göra detta om man kör mySQL? :o

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

## #6 — LarsG, 2003-03-16T20:36Z

det blir med temporära tabeller och flera frågor.

create temporary table t(sid char(4), tid datetime)
select max(tid),sid from tabell
group by sid

select tabell.\* from tabell join t on on tabell.sid = t.sid and tabell.tid = t.tid

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

## #7 — Kristianstad, 2003-03-16T20:38Z

Jag testade **SELECT sID, sSida, max(Tid), ID FROM Online group by sID** och det fungerar hittills. Eller finns det någon "bugg" i den sql-frågan?

Tack! :)

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

## #8 — LarsG, 2003-03-16T20:43Z

Det finns det. 

Det är ingen garanti att värdet för sSida hämtas från den post där max(tid) hittas. Vilket värde som helst inom gruppen kan returneras. 

Hela denna konstruktion är väldigt försåtlig eftersom det är svårt att upptäcka att man gör fel. Det är bara Mysql som tillåter denna korkade semantik.

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

## #9 — Kristianstad, 2003-03-16T20:53Z

mySQL är kanske inte så bra egentligen.

> \[TCX\]\[MyODBC\]Kolumn namn 'sid finns flera gånger

 blev det nu. Felet ligger på den första sql-frågan där den temporära tabellen skapas.
Jag kör väl en vanlig execute på den?

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

## #10 — LarsG, 2003-03-16T21:14Z

Jo, men här kan du inte skylla på Mysql.

Hur ser koden ut?

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

## #11 — Kristianstad, 2003-03-16T21:27Z

Kom på det. Det verkar som om man inte kan ha samma namn på fälten.

```
create temporary table t(sidA char(4), tidB datetime) 
select max(tid),sid from tabell 
group by sid
```

Nu ser det ut så här: (obs! jag har funktioner som fixar execute)

```
andraDbRows("create temporary table t(sida char(4), tida datetime) select max(tid),sid from online group by sid")
minArray = getDbRows("select online.* from online join t on online.sid = t.sida and online.tid = t.tid")
```

Felet blir nu:

> \[TCX\]\[MyODBC\]Du har något fel i din syntax nära 'on on online.sid = t.sida and online.tid = t.tid'

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

## #12 — LarsG, 2003-03-16T21:53Z

Ja visst, mysql kräver att du skriver vilken jointyp du använder.

```
minArray = getDbRows("select online.* from online inner join t on online.sid = t.sida and online.tid = t.tid")
```

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

## #13 — Kristianstad, 2003-03-17T06:28Z

Det händer ingenting. Blir tomt. RecSet.EOF=True
Så här ser det ut nu:

```
andraDbRows("create temporary table t(sida char(4), tida datetime) select max(tid),sid from online group by sid")
minArray = getDbRows("select online.* from online inner join t on online.sid = t.sida and online.tid = t.tida")
```

Vad är det som är galet?

Jag har en liten fråga angående temporära tabeller också. Fungerar det när det är flera användare där samtidigt? Det verkar som om den inte fungerar med flera samtidigt. Den säger att T inte finns. Jag kör även DROP TABLE T, men vem vet om någon användare kommer in innan den koden körs.

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

## #14 — LarsG, 2003-03-17T09:36Z

skapar du nya connections för varje anrop? En temporär tabell försvinner när sessionen avslutas.

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

## #15 — Kristianstad, 2003-03-17T15:28Z

Jag får det inte att visa något. Varför? Även om jag kör det i samma connection. Om jag kör rs.eof så är den TRUE.
Vad är det som är galet?

Märk väl att rs.eof är FALSE om man bara skriver select \* from t.

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

## #16 — Kristianstad, 2003-03-17T20:51Z

Kom på att det underlättar kanske felsökandet för dig om jag ger dig den kod som jag har just nu:

```
<%
Set Conn = Server.CreateObject("ADODB.Connection")
' Koppling
Set gbo = Conn.Execute("create temporary table t(sida char(4), tida datetime) select max(tid),sid from online group by sid")
Set gbo = Conn.Execute("select online.* from online inner join t on online.sid = t.sida and online.tid = t.tida")
If gbo.EOF = True Then
%>Tomt<%
End If
Set gbo = Nothing
Conn.Close
Set Conn=Nothing
```

Resultatet då man kör denna kod är:
**Tomt**

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

## #17 — LarsG, 2003-03-18T18:18Z

create table med select i Mysql är lite udda. 

Som din kod är skriven så kommer t att innehålla fyra kolumner (sida,tida,,sid). Om namnen mellan kolumnlistan och selectsatsen inte stämmer så tolkas det som nya kolumner.

```
Set gbo = Conn.Execute("create temporary table t(sid char(4), tid datetime) select sid,max(tid) as tid from online group by sid")
```

Det var också fel ordning mellan kolumnerna (mitt fell).

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

## #18 — Kristianstad, 2003-03-19T17:17Z

Hej och tack för svar!
Nu kommer 

> \[TCX\]\[MyODBC\]Kolumn namn 'sid finns flera gånger

 vid körande av denna kod.

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

## #19 — LarsG, 2003-03-21T20:22Z

Hmm,  det här inget som jag har någon praktisk erfarenhet av så jag försöker bara tolka manualen

Du borde kunna skriva så här

```
Set gbo = Conn.Execute("create temporary table t select sid,max(tid) as tid from online group by sid")
```

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

## #20 — Kristianstad, 2003-03-21T21:47Z

Tack! Äntligen fungerade det! :) Tack!

Förresten:
Första gången man kör koden fungerar den utmärkt men om man uppdaterar sidan (F5) kommer det upp att ***Tabellen 't' finns redan***. Jag har det i samma connection. Vad kan det bero på?

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

---

Tråden på webben: https://www.webforum.nu/amne/databaser-sql/71219-group  
Nästa sida: https://www.webforum.nu/amne/databaser-sql/71219-group/page2.md
