Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> funkcja agregująca i grupowanie
bpskiba
post 18.03.2012, 14:44:14
Post #1





Grupa: Zarejestrowani
Postów: 340
Pomógł: 49
Dołączył: 3.07.2009
Skąd: Rzeszów

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


Witam
Mam taki problemik:
Jest sobie tabela, w której trzymane są kartoteki magazynowe

stan:
id_towaru int(11) NOT NULL
id_magazynu int(11) NOT NULL
id_stanu int(11) NOT NULL PRIMARY KEY
data datetime NOT NULL
ilosc double(15,4) NOT NULL
jedn int(20) NOT NULL
dest mediumint(9) NULL

Budowanie poszczególnych kartotek jest proste:
  1. SELECT DATA, ilosc FROM stan WHERE id_towaru=880 AND dest=6 AND jedn=1 AND id_magazynu=2
  2. ORDER BY DATA DESC, id_stanu DESC


określenie stanu na dany dzień dla kartoteki też jest proste:
  1. SELECT ilosc FROM stan WHERE id_towaru=880 AND dest=6 AND jedn=1 AND id_magazynu=2 AND DATA<'2012-03-03 00:00:00'
  2. ORDER BY DATA DESC, id_stanu DESC
  3. LIMIT 1


Problem zaczyna się gdy chcę wyświetlić stan całego magazynu na żądany dzień.
Proste pytanie wyświetla bzdury:
  1. SELECT MAX(DATA),ilosc,id_magazynu,jedn,dest,id_towaru FROM stan
  2. WHERE id_magazynu=1
  3. GROUP BY id_towaru,id_magazynu,jedn,dest


Częściowo rozwiązałem to następująco:
  1. SELECT s1.id_towaru,s1.dest,s1.ilosc,s1.jedn
  2. FROM stan s1,(SELECT MAX(DATA) dd,id_stanu,id_towaru,dest,jedn,ilosc
  3. FROM stan
  4. WHERE DATA<'2012-03-01 00:00:00' AND id_magazynu=1
  5. GROUP BY id_towaru,dest,id_magazynu,jedn) s2
  6. WHERE s1.DATA=s2.dd AND s1.id_towaru=s2.id_towaru AND s2.dest=s1.dest AND s1.jedn=s2.jedn


Jest to wyjątkowo kiepskie rozwiązanie...
Po pierwsze jego czas jego wykonania jest nie do przyjęcia, a po drugie nie uwzględnia drugiego elementu sortowania (w przypadku tej samej wartości datetime sortuję malejąco po id_stanu).


Będę wdzięczny za wszystkie pomysły i sugestie.

Piotrek
Go to the top of the page
+Quote Post

Posty w temacie


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: 23.06.2025 - 11:57