06. december 2005 - 10:05Der er
6 kommentarer og 1 løsning
Sql query - Join
Jeg har to tabeller Customer & Task:
Customer Task ====================== ========================== ID Name Date Text Customer_id ---- -------------- -------- ----- --------- 1 Test1 18/12/2005 Task1 1 2 Test2 21/12/2005 Task2 1 3 Cutom1 17/12/2005 Task 2
Det jeg skal bruge er kunde navn og naeste opgave. I nuvaerende version henter jeg fra en table af gangen og slaar naeste aftale op. Der er performance problemer med det da der er ret mange records i de to tabeller. Skal bruge en join der giver mig foelgende resultat.
ID Name Next task Text ----------------------------------------------------------------- 1 Test1 18/12/2005 Task1 2 Test2 17/12/2005 Task2 3 Custom1 ================================================= Alle de joins jeg har proevet giver mig 4 raekker da customer_id = 1 er to gange.
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
Saetter lige tabellerne ind igen saa de er mere laeselige: Customer ====================== ID Name ---- -------------- 1 Test1 2 Test2 3 Cutom1 ======================
Task ========================================== Date Text Customer_id -------- ----- --------- 18/12/2005 Task1 1 21/12/2005 Task2 1 17/12/2005 Task 2 ===========================================
Denne sql henter den førstkommende task på hver kunde
Select *, (select top 1 Date from Task where customer_id = Customer.id and date >= getdate() order by date asc) as date, (select top 1 Text from Task where customer_id = Customer.id and date >= getdate() order by date asc) as Text from Customer
Jeg vil tro nedenstående SQL er noget mere effektiv.
Select c.*, T1.Date, T1.Text from Customer C left join (Select T.Customer_ID, T.Date, T.Text from Task T inner join (Select Customer_ID, min(Date) as date from Task where date >= getdate() group by Customer_ID) as T2 on T.Customer_ID = T2.Customer_ID and T.Date = T2.Date) as T1 on C.ID = T1.Customer_ID
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.