Avatar billede bzz_rar Nybegynder
10. august 2005 - 08:42 Der er 8 kommentarer og
1 løsning

(Avanceret?) sortering af tabel (Del 2)

Jeg prøver lige igen, da jeg alligevel ikke fik løst mit problem i mit forrige tråd. (var lidt for hurtig :-)

Jeg har et forum med en tabel som i dette eksempel:


[TABEL]

ID    Emne        SvarID        Dato
1      AAAA        0        09-08-2005 10:23
2      SV: AAAA    1        09-08-2005 10:24
3      BBBB        0        09-08-2005 10:27
4      CCCC        0        09-08-2005 10:30
5      SV:CCCC    4        09-08-2005 10:44
6      SV: AAAA    1        09-08-2005 10:46
7      SV:CCCC    4        09-08-2005 10:47
8      DDDD        0        09-08-2005 10:50
9      SV: DDDD    8        09-08-2005 10:52
10    SV: CCCC    4        09-08-2005 10:56



Jeg skal have sorteret den efter aktive (hotte) tråde, dvs så resultatet af en query bliver følgende:


[FORESPØRGSELSRESULTAT]

ID        Emne        Dato
4        CCCC        09-08-2005 10:56
8        DDDD        09-08-2005 10:52
1        AAAA        09-08-2005 10:46
3        BBBB        09-08-2005 10:27



Har prøvet med

SELECT    TOP 100 PERCENT MAX(id), REPLACE(Emne, 'SV: ', ''), MAX(Dato)
FROM        dbo.Tabel
GROUP BY REPLACE(Emne, 'SV: ', '')
ORDER BY MAX(Dato) DESC


men det giver forkerte ID-numre:

ID          Emne          Dato
10    CCCC    09-08-2005 10:56:00
9    DDDD    09-08-2005 10:52:00
6    AAAA    09-08-2005 10:46:00
3    BBBB    09-08-2005 10:27:00


Kan nogen hjælpe med en løsning?

--Thomas
Avatar billede arne_v Ekspert
10. august 2005 - 09:03 #1
har du prøvet at erstatte MAX(id) med MIN(id) ?
Avatar billede bzz_rar Nybegynder
10. august 2005 - 09:56 #2
Ja, det giver umiddelbart det rigtige, men da værdien i Emne-feltet ikke er unik, vil MIN(id) altid referere til første tråd og ikke sidste i tilfælde af dubletter i emnefeltet.

dvs der kan godt være en ny unik record (ny tråd) med samme værdi i emnefeltet:

[Table]
Id    Emne        SvarID  Dato
1      AAAA        0        09-08-2005 10:23
2      SV: AAAA    1        09-08-2005 10:24
3      BBBB        0        09-08-2005 10:27
4      CCCC        0        09-08-2005 10:30
5      SV:CCCC    4        09-08-2005 10:44
6      SV: AAAA    1        09-08-2005 10:46
7      SV:CCCC    4        09-08-2005 10:47
8      DDDD        0        09-08-2005 10:50
9      SV: DDDD    8        09-08-2005 10:52
10    SV: CCCC    4        09-08-2005 10:56
11    AAAA        0        10-08-2005 09:43
12    SV: AAAA    11      10-08-2005 09:45


Med MIN(id) bliver resultatet

Id      Emne    Dato
1    AAAA    10-08-2005 09:45:00
4    CCCC    09-08-2005 10:56:00
8    DDDD    09-08-2005 10:52:00
3    BBBB    09-08-2005 10:27:00


men det skal være

Id      Emne    Dato
11    AAAA    10-08-2005 09:45
4    CCCC    09-08-2005 10:56
8    DDDD    09-08-2005 10:52
1    AAAA    09-08-2005 10:46
3    BBBB    09-08-2005 10:27
Avatar billede arne_v Ekspert
10. august 2005 - 10:15 #3
ah - det er jo lidt anderledes

prøv:

SELECT id,emne,(SELECT MAX(dato) FROM tabel t2 WHERE t2.svarid=t1.id OR t2.id=t1.id)
FROM tabel t1
WHERE svarid=0
Avatar billede bzz_rar Nybegynder
10. august 2005 - 10:42 #4
Vi er på vej! Der mangler lidt med sorteringen for at få det til at stå rigtigt. Hvis jeg skriver:

SELECT TOP 10 id,emne,(SELECT MAX(dato) FROM tabel t2 WHERE t2.svarid=t1.id OR t2.id=t1.id)AS DatoNy FROM tabel t1 ORDER by DatoNy

bliver det så tungt, at der kommer timeout på SQL Serveren. Har du et forslag til, hvorledes sorteringen kan klares på en mere optiomal måde?
Avatar billede arne_v Ekspert
10. august 2005 - 10:44 #5
har du index på felterne: id,svarid,dato ?
Avatar billede bzz_rar Nybegynder
10. august 2005 - 11:40 #6
Nej, men det lyder som noget jeg bør have :-|

Er det noget med at vælge [Design Table] i Enterprise Manager, højreklikke og vælge [Indexes/keys] og vælge [Dato Descending]?
Avatar billede arne_v Ekspert
10. august 2005 - 11:50 #7
lyder rigtigt
Avatar billede bzz_rar Nybegynder
11. august 2005 - 08:12 #8
Ok - så fungerer det efter hensigtet. Tak for det! Kom med et svar..
Avatar billede arne_v Ekspert
11. august 2005 - 09:33 #9
kommer her
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester