|
| 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
| |
|
|