Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Select zagnieżdżony, Pomoc przy podzapytaniu
sulek
post 24.10.2016, 09:11:32
Post #1





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 24.10.2016

Ostrzeżenie: (0%)
-----


Witam,

Mam prośbę. Próbuje zbudować zapytanie które, wyświetli mi listę środków trwałych z najwyższym idoperacji. Zaznaczę ze muszę połączyć trzy tabele.

W pieszej mam Listę Sroków trwałych -dbo.tblSRODKI s
W drugiej mam Mapowanie danych Między operacjami z Środkami Trwałymi dbo.tblMIEJSCAsrodki
W trzeciej mam Listę miejsc użytkowana - dbo.tblMIEJSCA

Potrzebuje wyświetlić listę Srodków trwałych z najwyższym kodem operacji. Oznacza on aktualne miejsce użytkowania.



Zapytanie które napisałem

  1. SELECT s.id, s.NazwaSrodka, k.IdOperacji, m.Nazwa AS 'Nazawa_operacji' FROM dbo.tblSRODKI s
  2.  
  3. INNER JOIN dbo.tblMIEJSCAsrodki k
  4. ON(s.id = k.IdSrodka)
  5.  
  6. INNER JOIN dbo.tblMIEJSCA m
  7. ON(k.IdMiejsca = m.id)
  8.  
  9. ORDER BY s.id, k.IdOperacji



Wynik jaki otrzymałem:




Jak z podanego zapytania wyświetlić dla każdego s.id (SrodkaTrwałego) wyświetlić tylko jeden rekord, z najwyższym k.IdOperacj

Ten post edytował sulek 24.10.2016, 09:13:35
Go to the top of the page
+Quote Post
mmmmmmm
post 24.10.2016, 09:40:18
Post #2





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Zamiast:
  1. INNER JOIN dbo.tblMIEJSCAsrodki k

daj:
  1. INNER JOIN (SELECT * FROM dbo.tblMIEJSCAsrodki WHERE (IdSrodka, IdOperacji) IN (SELECT IdSrodka, Max(IdOperacji) FROM dbo.tblMIEJSCAsrodki GROUP BY IdSrodka) ) k
Go to the top of the page
+Quote Post
sulek
post 24.10.2016, 09:42:30
Post #3





Grupa: Zarejestrowani
Postów: 2
Pomógł: 0
Dołączył: 24.10.2016

Ostrzeżenie: (0%)
-----


OK dzięki za odpowiedz. Ja w między czasie zmodyfikowałem zapytanie i z mojej analizy wynika ze też działa.


  1. SELECT s.id, s.NazwaSrodka, k.IdOperacji, m.Nazwa AS 'Nazawa_operacji' FROM dbo.tblSRODKI s
  2.  
  3. INNER JOIN dbo.tblMIEJSCAsrodki k
  4. ON(s.id = k.IdSrodka)
  5.  
  6. INNER JOIN dbo.tblMIEJSCA m
  7. ON(k.IdMiejsca = m.id)
  8.  
  9. WHERE k.IdOperacji = (SELECT max(ss.IdOperacji) FROM dbo.tblMIEJSCAsrodki ss WHERE ss.IdSrodka = k.IdSrodka)
  10.  
  11. ORDER BY s.id, k.IdOperacji
  12.  



Może komuś się przyda smile.gif
Go to the top of the page
+Quote Post
mmmmmmm
post 24.10.2016, 10:11:47
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


Sprawdz plany wykonania. Wydaje mi się, że moje jednak będzie bardziej wydajne.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 06:08