/ Forside / Teknologi / Udvikling / ASP / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
ASP
#NavnPoint
smorch 9259
Harlekin 1866
molokyle 1040
Steffanst.. 758
gandalf 657
smilly 564
gibson 560
cumano 530
MouseKeep.. 480
10  Random 410
MsSql SELECT TOP ORDER BY?
Fra : Ukendt


Dato : 05-10-08 11:55

Hej,

Jeg søger efter de 19 nyeste poster i en database tabel med:

SQLstmt = "SELECT TOP 19 IdNo,PlayDate FROM tblKalender WHERE PlayDate <
(DateSerial(2008, 10, 5)) AND ScoreCard = 1 ORDER BY PlayDate DESC"

Når posterne listes skal ORDER BY være ASC og ikke DESC, kan jeg liste
posterne sorteret ASC uden at foretage en ny søgning?

Mvh
Henning




 
 
Jørn Andersen (05-10-2008)
Kommentar
Fra : Jørn Andersen


Dato : 05-10-08 15:05

On Sun, 5 Oct 2008 12:54:32 +0200, "Henning Smed" <henning snabela
smeds dot dk> wrote:

>Jeg søger efter de 19 nyeste poster i en database tabel med:
>
>SQLstmt = "SELECT TOP 19 IdNo,PlayDate FROM tblKalender WHERE PlayDate <
>(DateSerial(2008, 10, 5)) AND ScoreCard = 1 ORDER BY PlayDate DESC"
>
>Når posterne listes skal ORDER BY være ASC og ikke DESC, kan jeg liste
>posterne sorteret ASC uden at foretage en ny søgning?

To muligheder:
1. Brug objRs.GetRows og udskriv arrayet "baglæns"
2. Kræver, at du bruger en ikke-statisk cursor:

objRs.MoveLast
Do While Not objRs.BOF
' Udskriv post
objRs.MovePrevious
Loop


Good luck!

--
Jørn Andersen,
Brønshøj

Ukendt (06-10-2008)
Kommentar
Fra : Ukendt


Dato : 06-10-08 13:55


"Jørn Andersen" <jorn@jorna.dk> wrote in message
news:52ihe4lquptnr16sujbajtup59c4v0qb91@4ax.com...
> On Sun, 5 Oct 2008 12:54:32 +0200, "Henning Smed" <henning snabela
> smeds dot dk> wrote:
>
>>Jeg søger efter de 19 nyeste poster i en database tabel med:
>>
>>SQLstmt = "SELECT TOP 19 IdNo,PlayDate FROM tblKalender WHERE PlayDate <
>>(DateSerial(2008, 10, 5)) AND ScoreCard = 1 ORDER BY PlayDate DESC"
>>
>>Når posterne listes skal ORDER BY være ASC og ikke DESC, kan jeg liste
>>posterne sorteret ASC uden at foretage en ny søgning?
>
> To muligheder:
> 1. Brug objRs.GetRows og udskriv arrayet "baglæns"
> 2. Kræver, at du bruger en ikke-statisk cursor:
>
> objRs.MoveLast
> Do While Not objRs.BOF
> ' Udskriv post
> objRs.MovePrevious
> Loop

Tak for dit svar Jørn,
Jeg har valgt at bruge Stig Johansens løsning , men jeg gemmer dit forslag i
min private kode samling.
Mvh
Henning



Stig Johansen (05-10-2008)
Kommentar
Fra : Stig Johansen


Dato : 05-10-08 22:18

"Henning Smed" <henning snabela smeds dot dk> wrote in message
news:48e89ce9$0$90267$14726298@news.sunsite.dk...
> Hej,
>
> Jeg søger efter de 19 nyeste poster i en database tabel med:
>
> SQLstmt = "SELECT TOP 19 IdNo,PlayDate FROM tblKalender WHERE PlayDate <
> (DateSerial(2008, 10, 5)) AND ScoreCard = 1 ORDER BY PlayDate DESC"
>
> Når posterne listes skal ORDER BY være ASC og ikke DESC, kan jeg liste
> posterne sorteret ASC uden at foretage en ny søgning?

Yeps.

I og med du skriver MS SQLServer, går jeg ud fra du også har databasen pubs
installeret.

Her har jeg lavet følgende analoge eksempel:
SELECT TOP 5 ord_date,stor_id,ord_num FROM sales
WHERE ord_date < '1994-01-01'ORDER BY ord_date DESC

Den giver som din en faldende sortering, så vi pakker den ind i en
subselect:

SELECT * FROM (
SELECT TOP 5 ord_date,stor_id,ord_num FROM sales
WHERE ord_date < '1994-01-01'ORDER BY ord_date DESC
) AS S ORDER BY ord_date

Den giver så en stigende sortering.

--
Med venlig hilsen/Best regards
Stig Johansen




Ukendt (06-10-2008)
Kommentar
Fra : Ukendt


Dato : 06-10-08 13:42


"Stig Johansen" <wopr.dk@gmail.com> wrote in message
news:48e92ea0$0$90263$14726298@news.sunsite.dk...
> "Henning Smed" <henning snabela smeds dot dk> wrote in message
> news:48e89ce9$0$90267$14726298@news.sunsite.dk...
>> Hej,
>>
>> Jeg søger efter de 19 nyeste poster i en database tabel med:
>>
> Her har jeg lavet følgende analoge eksempel:
> SELECT TOP 5 ord_date,stor_id,ord_num FROM sales
> WHERE ord_date < '1994-01-01'ORDER BY ord_date DESC
>
> Den giver som din en faldende sortering, så vi pakker den ind i en
> subselect:
>
> SELECT * FROM (
> SELECT TOP 5 ord_date,stor_id,ord_num FROM sales
> WHERE ord_date < '1994-01-01'ORDER BY ord_date DESC
> ) AS S ORDER BY ord_date
>
> Den giver så en stigende sortering.
>
Mange tak for dit svar Stig,

SELECT * FROM ( SELECT TOP 19 IdNo,PlayDate FROM tblKalender WHERE PlayDate
< (DateSerial(2008, 10, 7)) AND ScoreCard = 1 ORDER BY PlayDate DESC) ORDER
BY PlayDate ASC

Select sætningen ovenfor fungerer fint og giver stigende sortering, er det
det "SELECT * FROM" eller "SELECT TOP 19" som skal indeholde de koloner jeg
skal bruge resultatet fra, dvs. skal jeg erstatte "SELECT *" med "SELECT
IdNo,PlayDate"?



Stig Johansen (06-10-2008)
Kommentar
Fra : Stig Johansen


Dato : 06-10-08 13:54

"Henning Smed" <henning at smeds dot dk> wrote:

> Mange tak for dit svar Stig,
>
> SELECT * FROM ( SELECT TOP 19 IdNo,PlayDate FROM tblKalender WHERE
> PlayDate < (DateSerial(2008, 10, 7)) AND ScoreCard = 1 ORDER BY PlayDate
> DESC) ORDER BY PlayDate ASC
>
> Select sætningen ovenfor fungerer fint og giver stigende sortering, er det
> det "SELECT * FROM" eller "SELECT TOP 19" som skal indeholde de koloner
> jeg skal bruge resultatet fra, dvs. skal jeg erstatte "SELECT *" med
> "SELECT IdNo,PlayDate"?

Man kan sige at "SELECT TOP 19 IdNo,PlayDate " returnerer en slags
midlertidig tabel med 2 kolonner: IdNo,PlayDate

Den omkringliggende SELECT * returnerer alle kolonner inden for denne tabel,
dvs. kun IdNo og PlayDate.

Hvis du skal bruge flere kolonner, skal du udvide den 'inderste' SELECT.

--
Med venlig hilsen
Stig Johansen

Ukendt (06-10-2008)
Kommentar
Fra : Ukendt


Dato : 06-10-08 14:26


"Stig Johansen" <wopr.dk@gmaill.com> wrote in message
news:48ea0b0f$0$90263$14726298@news.sunsite.dk...
> "Henning Smed" <henning at smeds dot dk> wrote:
>
>> Mange tak for dit svar Stig,
>>
>> SELECT * FROM ( SELECT TOP 19 IdNo,PlayDate FROM tblKalender WHERE
>> PlayDate < (DateSerial(2008, 10, 7)) AND ScoreCard = 1 ORDER BY PlayDate
>> DESC) ORDER BY PlayDate ASC
>>
>> Select sætningen ovenfor fungerer fint og giver stigende sortering, er
>> det
>> det "SELECT * FROM" eller "SELECT TOP 19" som skal indeholde de koloner
>> jeg skal bruge resultatet fra, dvs. skal jeg erstatte "SELECT *" med
>> "SELECT IdNo,PlayDate"?
>
> Man kan sige at "SELECT TOP 19 IdNo,PlayDate " returnerer en slags
> midlertidig tabel med 2 kolonner: IdNo,PlayDate
>
> Den omkringliggende SELECT * returnerer alle kolonner inden for denne
> tabel,
> dvs. kun IdNo og PlayDate.
>
> Hvis du skal bruge flere kolonner, skal du udvide den 'inderste' SELECT.
>
Tak for en logisk forklaring Stig,
Så lærte jeg også noget nyt i dag.
/Henning



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408914
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste