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