Avatar billede tblaster Nybegynder
23. september 2008 - 16:32 Der er 8 kommentarer og
1 løsning

Sorter data på baggrund af datofelt fra 2 tabeller

Jeg har 2 tabeller der bægge har et felt navngivet CreateDato. Er det muligt at lave et sql udtræk der trækker de 30 nyeste poster ud på baggrund af CreateDato feltet.

Jeg kan kun finde en løsning til at trække posterne ud på baggrund af en sortering fra den ene tabel:
SELECT Top 30 * FROM Tabel1, Tabel2 Where Tabel1.ID = Tabel2.Tabel1ID Order By Tabel1.CreateDato Desc

Eksempel på hvordan dataen skal trækkes ud:

Tabel 1:
ID 1, CreateDato 11-09-2008
ID 2, CreateDato 20-09-2008
ID 3, CreateDato 23-09-2008

Tabel 2:
Tabel1ID 1, CreateDato 22-09-2008

Ønsket sortering af poster:
ID 3
ID 1
ID 2
Avatar billede HenrikSjang Nybegynder
23. september 2008 - 16:56 #1
Hvis du ønsker at de 30 poster bliver x fra tabel 1 plus y fra tabel 2, så skal du have gang i en join.

Jeg har ikke lige testet dette, men det kan måske hjælpe dig med at komme videre:

select top 30 * from (
  select id, CreateDato from tabel1
  union
  select id, CreateDato from tabel2
) t1
order by CreateDato desc
Avatar billede tblaster Nybegynder
23. september 2008 - 17:11 #2
Det ønsker jeg ikke. Jeg ønsker kun værdier fra tabel 1 men jeg ønsker at de også bliver sorteret fra tabel 2. Som jeg forstår dit eksempel vil jeg få følgende:
ID 3
Tabel1ID 1 (Dvs udtrækket fra tabel 2)
ID 2
ID 1
Avatar billede Syska Mester
23. september 2008 - 17:19 #3
Tror du skal ud med lidt mere om din struktur ... jeg forstår ikke helt hvorfor du vil sortere på data du ikke vil have ud ?

sjang's post løser dit problem som jeg ser det ... men ... det er åbenbart noget andet du vil have ...

// ouT
Avatar billede tblaster Nybegynder
23. september 2008 - 17:55 #4
Lad mig forsøge med et mere konkret eksempel:

Tabel 1: (Indeholder information om køb af computer)
ID: 1, Navn: Computer 1, CreateDato 11-09-2008
ID: 2, Navn: Computer 2, CreateDato 20-09-2008
ID: 3, Navn: Computer 3, CreateDato 23-09-2008

Tabel 2: (Indeholder information om opgradering af computer)
ID 1, Tabel1ID 1, CreateDato 22-09-2008

Obs. tabel 1 indeholder også en række felter som ikke findes i tabel 2 og ligeledes med tabel 2.

Nu vil jeg så gerne have en liste med følgende information:
Tabel1.ID, Tabel1.Navn

Og listen skal sorter computerne efter nyeste indkøbte og samtidig efter seneste opgraderet. Dvs. at jeg skal have følgende liste:
Computer 3 (Dato: 23-09-2008)
Computer 1 (Dato: 22-09-2008)
Computer 2 (Dato: 20-09-2008)

Giver det mere mening, og kan det lade sig gøre?
Avatar billede aaberg Nybegynder
23. september 2008 - 18:49 #5
Dette er ikke testet, men noget i denne dur bør løse dit problem :-)

select t1.ID, t1.Navn, ISNULL(t2.CreateDato, t1.CreateDato) CreateDato
from Tabel1 t1
left outer join Tabel2 t2 on t1.ID = t2.Tabel1ID
order by ISNULL(t2.CreateDato, t1.CreateDato)
Avatar billede aaberg Nybegynder
23. september 2008 - 18:51 #6
Og så kan du selvfølgelig tilføje "TOP 30" til "select" delen, hvis det bare er de 30 øverste du skal bruge.
Avatar billede Syska Mester
23. september 2008 - 23:57 #7
wow ... det er faktisk ikke helt dumt tænkt der aaberg :-)

For mig at se bør den også virke ..
Avatar billede tblaster Nybegynder
24. september 2008 - 16:35 #8
Mange tak! Det lader til at virke. Post et svar hvis du vil have point.
Avatar billede aaberg Nybegynder
24. september 2008 - 17:32 #9
Svar  :-)
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