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

Kodeord


Reklame
Top 10 brugere
SQL
#NavnPoint
pmbruun 1704
niller 962
fehaar 730
Interkril.. 701
ellebye 510
pawel 510
rpje 405
pete 350
gibson 320
10  smorch 260
Hj=E6lp til udtr=E6k
Fra : AHM


Dato : 24-02-05 09:59

Hvis jeg har følgende tabel:

Draw
ID
Week
Name

Med følgende indhold:

1 10 Anders
2 10 Bent
3 11 Christian
4 11 Dennis
5 12 Erik
6 12 Frederik

Er det så muligt, at lave et SQL-udtræk, som udtrækker rækkerne med de
to højeste ugenumre, i ovenstående uge 11 og 12. Uden at ugenumrene skal
angives i selve SQL'en?

Pseudo:

SELECT *
FROM Draw
TOP 2 Week

 
 
Lars Balker Rasmusse~ (24-02-2005)
Kommentar
Fra : Lars Balker Rasmusse~


Dato : 24-02-05 10:16

AHM <ingen@spam.tak> writes:

> Hvis jeg har følgende tabel:
>
> Draw
> ID
> Week
> Name
>
> Med følgende indhold:
>
> 1 10 Anders
> 2 10 Bent
> 3 11 Christian
> 4 11 Dennis
> 5 12 Erik
> 6 12 Frederik
>
> Er det så muligt, at lave et SQL-udtræk, som udtrækker rækkerne med de
> to højeste ugenumre, i ovenstående uge 11 og 12. Uden at ugenumrene skal
> angives i selve SQL'en?

PostgreSQL:

SELECT * FROM Draw WHERE Week IN
(SELECT Week FROM Draw
GROUP BY Week
ORDER BY Week DESC LIMIT 2);

Det kan man så ikke i MySQL, men du skriver jo ikke hvilken db du bruger.
--
Lars Balker Rasmussen Consult::Perl
http://consult-perl.dk

AHM (24-02-2005)
Kommentar
Fra : AHM


Dato : 24-02-05 13:24

In article <0f7jky9v3q.fsf@lagavulin.balker.org>, lars@balker.org
says...

> Det kan man så ikke i MySQL, men du skriver jo ikke hvilken db du bruger.

Tester på Access, hvor ovenstående formodentlig ikke er muligt, men i
sidste ende skal det over på en Microsoft SQL Server.

Jens Gyldenkærne Cla~ (24-02-2005)
Kommentar
Fra : Jens Gyldenkærne Cla~


Dato : 24-02-05 13:43

AHM skrev:

> Tester på Access, hvor ovenstående formodentlig ikke er muligt, men i
> sidste ende skal det over på en Microsoft SQL Server.

Både Access og MSSQL understøtter underforespørgsler - så Lars' eksempel
kan godt bruges der. Der skal dog ændres en smule, fordi Access og MSSQL
bruger TOP n i stedet for LIMIT n til at begrænse antal poster:

SELECT * FROM Draw WHERE Week IN
(SELECT TOP 2 Week FROM Draw
GROUP BY Week
ORDER BY Week DESC)

Ovenstående kan formentlig også laves med et join:

SELECT d.*
FROM Draw d INNER JOIN
   (SELECT TOP 2 Week FROM Draw
      GROUP BY Week
      ORDER BY Week DESC) AS w
ON d.Week = w.Week

Det er muligvis hurtigere på den måde.

--
Jens Gyldenkærne Clausen
Svar venligst under det du citerer, og citer kun det der er
nødvendigt for at forstå dit svar i sammenhængen. Se hvorfor og
hvordan på http://usenet.dk/netikette/citatteknik.html

Troels Arvin (24-02-2005)
Kommentar
Fra : Troels Arvin


Dato : 24-02-05 13:46

On Thu, 24 Feb 2005 13:24:26 +0100, AHM wrote:

> Tester på Access, hvor ovenstående formodentlig ikke er muligt, men i
> sidste ende skal det over på en Microsoft SQL Server.

Jeg mener, at Access - ligesom MSSQL - benytter en konstruktionen
SELECT TOP x ...
til at begrænse resultatsæt.

Så du kan muligvis benytte følgende (som i hvertfald virker i MSSQL):

SELECT *
FROM Draw
WHERE Week IN (
SELECT DISTINCT TOP 2 Week
FROM Draw
ORDER BY week DESC
);

--
Greetings from Troels Arvin, Copenhagen, Denmark


Peter Brodersen (24-02-2005)
Kommentar
Fra : Peter Brodersen


Dato : 24-02-05 13:47

On Thu, 24 Feb 2005 10:15:53 +0100, Lars Balker Rasmussen
<lars@balker.org> wrote:

>Det kan man så ikke i MySQL, men du skriver jo ikke hvilken db du bruger.

Næeh, tilsyneladende ikke:
ERROR 1235 (42000): This version of MySQL doesn't yet support 'LIMIT &
IN/ALL/ANY/SOME subquery'

Det kan man godt blive lidt træt af. Men man kan dog bruge en variant
af Jens' query, hvis det skal være:

SELECT d.* FROM Draw d INNER JOIN
(SELECT Week FROM Draw GROUP BY Week ORDER BY Week DESC LIMIT 2) AS w
ON d.Week = w.Week;

Den virker fint på en MySQL 4.1.

--
- Peter Brodersen

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

Månedens bedste
Årets bedste
Sidste års bedste