Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sintaksa u upitu

[es] :: Access :: Sintaksa u upitu

[ Pregleda: 3067 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

mence
mitar pantic
beograd

Član broj: 40207
Poruke: 3
*.static.maksnet.net.



Profil

icon Sintaksa u upitu30.04.2008. u 14:18 - pre 194 meseci
Ovako imam tri tabele
Klijenti (#IdKlijenta, naziv...)
Aparati (#id Aparata, vrsta aparata...)
Servis ( #id servisa, datum... )
Treba mi upit u kojim ce biti prikazani svi klijenti kod kojih nismo bili proteklih 6 meseci sa tim sto ima klijenata koji imaju više aparata.
Treba imati u vidu da se ostali aparati kod istog klijenta zanemaruju, jer se podrazumeva da ako se poseti klijent jedanput u 6 meseci klijent je bio usluzen..



mence
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Sintaksa u upitu30.04.2008. u 15:30 - pre 194 meseci
Napravi prvo kveri koji prikazuje klijente kod kojih JESTE bili, nesto kao (pseudo kod):

qryOpsluzeniKlijenti:
SELECT DISTINCT #IDKlijenta
FROM Servis
WHERE Datum >= (ZadatiDatum)

Ko su klijenti kod kojih niste bili u od Zadog Datuma? Pa svi oni koje ne vrati qryOpsluzeniKlijenti. Kako ih dobijes? Pomocu 'unmatched query'. Iams wizard za to a moze i ovako:

SELECT #IdKlijenta
FROM Klijenti AS K
LEFT JOIN Servis AS S
ON S.IdKlijenta = K.IdKlijenta
WHERE S.IdKlijenta IS NULL

Mnogo puta je lkase dobiti suprotno od onog sta se u zadatku tarzi. To se zove logicka dupla negacija. Pronadji sve koji ne zadovoljavaju zadati uslov, pa ih iskljuci iz skupa svih mogucih. To smo ovd euradili. pronasli smo one koje ste obisli, pa smo ih iskljucili iz skupa svih klijenata.

:-)
 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 524
*.dynamic.sbb.rs.



+8 Profil

icon Re: Sintaksa u upitu30.04.2008. u 15:43 - pre 194 meseci
Nije me mrzelo da se pozabavim malo ovim problemom, ovaj primer se oslanja na pretpostavku da datumi servisa kao i ID u tabeli servis idu rastućim redosledom, tako da najnoviji servis ima i najveći ID. Napravio sam SubQuery da odredim ID Servisa za svakog klijenta, a zatim sam taj ID servisa povezao sa Servis tabelom da bih dobio koji je aparat tom prilikom servisiran.

Eto, dok ja pravim bazu drugi me preteknu...
Ozbiljan i odgovoran mladić
Prikačeni fajlovi
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Sintaksa u upitu30.04.2008. u 16:45 - pre 194 meseci
Mislim da može i bez te tabele L u query-ju. Radiće korektno i ovo:

SELECT Klijenti.Naziv, Servis.Datum, Aparati.Vrsta
FROM Klijenti INNER JOIN (Aparati INNER JOIN Servis ON Aparati.IDAparata = Servis.AparatID) ON Klijenti.IDKlijenta = Servis.KlijentID
GROUP BY Klijenti.Naziv, Servis.Datum, Aparati.Vrsta
HAVING (((Servis.Datum)<Now()-182));

Da li grešim?
 
Odgovor na temu

domaci_a_nas
PHP developer

Član broj: 42333
Poruke: 524
*.dynamic.sbb.rs.



+8 Profil

icon Re: Sintaksa u upitu30.04.2008. u 20:30 - pre 194 meseci
L nije tabela nego subquery. Mislim da grešiš, pošto uvođenje Aparata u Group By remeti priču. Za datum poslednje posete nije potrebna vrsta aparata. Ako recimo pre 11 meseci kod klikjenta popraviš frižider, a pre 3 meseca kod istog klijenta popraviš zamrzivač, onda će se taj klijent pojaviti u query, što ne bi trebalo da se dogodi.
Ozbiljan i odgovoran mladić
 
Odgovor na temu

Zidar
Canada

Moderator
Član broj: 15387
Poruke: 3085
*.100.46-69.q9.net.



+79 Profil

icon Re: Sintaksa u upitu30.04.2008. u 21:50 - pre 194 meseci
Nikola je lapo postavio kveri. I u pravu je za aparate. Pitanje je bilo 'ko nije obidjen u poslednjih 6 meseci'. Iz tabele Servis gledas samo u datum, bas te briga za aparat. Ono, lepo je da se pokaze kad si bio poslednji put od klijenta, i sta je radjeno, ali se to samo dodaje na osnovni kveri koji pronalazi one koji nisu obidjeni.

Ceo posao moze da se zavrsiu jednom prolazu, ali je to prebvelika muka u Accessu i postaje necitljivo. Sa nekoliko kverija u nizu lakse je razumeti sta se radi.

Sto se tice brzine odgovaranja, ne zaboravi da vremenska razlika ide meni u prednost. Ja dodjem na posao kad vi odlazite kuci i dok putujete mogu da radim pa ispednem jako brz. Vecina pitanja se postavi poslepodne i uvece po vasem vemenu. Mojih 9 do 5 je vasih 15 do 23 sata. Vi sigurno ne sedite za kompjuterom celo poslepodne i vece. Znaci, nije u pitanju pamet nego vremenska razlika Komparativna prednost, kako se govorilo u moje doba.

Da vidimo ko je brzi vikendom Zidar nema ma bas ni jedan jedini post vikendom i posle 5 sati po lokalnom vremenu, za sve ove godine.


Prikačeni fajlovi
 
Odgovor na temu

Getsbi

Moderator
Član broj: 124608
Poruke: 2831



+45 Profil

icon Re: Sintaksa u upitu30.04.2008. u 22:19 - pre 194 meseci
Ok. Prevideo sam zadnji iskaz.
 
Odgovor na temu

[es] :: Access :: Sintaksa u upitu

[ Pregleda: 3067 | Odgovora: 6 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.