Avatar billede stanislavsky Praktikant
18. december 2012 - 20:34 Der er 11 kommentarer og
1 løsning

Select senest 5 dage

Jeg ønsker en query som udvælger de seneste 5 kampdage for hver team.
Jeg har lavet følgende kode, som ikke virker efter hensigten, da koden udvælger alle kampdage.

select  data.date, data.HomeTeam, data.Goal
from data
where data.date in(
  select distinct  TOP 5 data.date
  from data d
  where data.date = d.Date
  )
group by data.HomeTeam, data.date, data.Goal

Kan I hjælpe?
18. december 2012 - 20:49 #1
Ikke testet, men prøv denne forenklede query:

select top 5 date, HomeTeam, Goal
from data
order by date DESC
Avatar billede Slettet bruger
18. december 2012 - 20:58 #2
select s1.*
from (
select data.date, data.HomeTeam, data.Goal
.row_number() over(partition by HomeTeam order by date) Nr
from data
) s1
where Nr < = 5
Avatar billede stanislavsky Praktikant
18. december 2012 - 21:39 #3
rahp,


Jeg får denne fejl:

Msg 156, Level 15, State 1, Line 5
Incorrect syntax near the keyword 'order'.
Avatar billede Slettet bruger
19. december 2012 - 00:44 #4
Der skal nok tabelnavn foran feltet Date:

.row_number() over(partition by data.HomeTeam order by data.date) Nr
Avatar billede stanislavsky Praktikant
19. december 2012 - 08:50 #5
rahp,

select s1.*
from (
select data.date, data.HomeTeam, data.FTHG Goal
.row_number() over(partition by HomeTeam) Nr
from data
) s1
where Nr < = 5

Jeg får samme fejl.



Hvis jeg fjerner 'order by data.date' får jeg denne fejl:

Msg 4121, Level 16, State 2, Line 1
Cannot find either column "data" or the user-defined function or aggregate "data.FTHG.row_number", or the name is ambiguous.
Avatar billede stanislavsky Praktikant
19. december 2012 - 09:53 #6
Christian_Belgien,

select top 5 date, HomeTeam, Goal
from data
order by date DESC

Denne query viser de 5 seneste dage, men den 30.11.12 er der 10 teams, som også skal vises.


2012-12-10 00:00:00.000    Clermont    0
2012-12-03 00:00:00.000    Guingamp    1
2012-12-01 00:00:00.000    Ajaccio GFCO    0
2012-12-01 00:00:00.000    Dijon    1
2012-11-30 00:00:00.000    Angers    0
19. december 2012 - 10:24 #7
Ok, nu jeg læser det problem du stiller op engang mere forstår jeg, at det ikke blot er de seneste fem kampdage du skal have, men de seneste fem kampdage for hvert team.

Det minder mig om problemstillingen i dette spørgsmål http://www.eksperten.dk/spm/973868 .  Problemet i det spørgsmål viste sig at overstige min ekspertise, men det blev løst fra anden side.  Måske kan det inspirere dig til at finde en løsning på problemet i dette spørgsmål.  Jeg kommer til at bakke ud.
Avatar billede Slettet bruger
19. december 2012 - 12:19 #8
Jeg havde fået skrevet et punktum i stedet for komma:

select s1.*
from (
select data.date, data.HomeTeam, data.Goal
,row_number() over(partition by data.HomeTeam order by data.date) Nr
from data
) s1
where Nr < = 5
Avatar billede stanislavsky Praktikant
19. december 2012 - 13:05 #9
rahp,
Tusind Tak for hjælpen.
Du skal have 60 point - hvordan er det lige jeg gør :-)
Avatar billede stanislavsky Praktikant
19. december 2012 - 16:16 #10
Christian_Belgien,
Tak for din indsats. Som du kan se, har jeg fået løst problemet.
Avatar billede stanislavsky Praktikant
19. december 2012 - 16:17 #11
rahp,
Vil du sende mig er svar, så jeg kan afslutte sagen..
19. december 2012 - 16:41 #12
stanislavsky, raph har allerede sendt et svar, nemlig indlæg #2.  Du behøver bare at acceptere det ('flueben' ved 'accepter dette svar' og derefter klik på 'Accepter svar og afgiv points') for at få afsluttet sagen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester