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
Annonceindlæg fra Cepheo
10. august 2005 - 09:03
#1
har du prøvet at erstatte MAX(id) med MIN(id) ?
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
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
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?
10. august 2005 - 10:44
#5
har du index på felterne: id,svarid,dato ?
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]?
10. august 2005 - 11:50
#7
lyder rigtigt
11. august 2005 - 08:12
#8
Ok - så fungerer det efter hensigtet. Tak for det! Kom med et svar..
11. august 2005 - 09:33
#9
kommer her
Computerworld tilbyder specialiserede kurser i database-management