Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] problem z zapytaniem
Forum PHP.pl > Forum > Bazy danych > MySQL
zawias
tabela wyglada nastepujaco

Zamowienia(nr_zam,data_zam,id_klienta,wartosc_zam)


Zapytanie ktore proboje stworzyc to

Podac wszytskie numery zamowien zlozonych po 01/01/2008, ktorych wartosc przkracza srednia wartosc zamowien z tego samego dnia....



narazie stworzylem zapytanie ktore liczy srednia zamowiena dla danego dnia ale nie wiem co dalej...
Łukasz O.
  1. SELECT
  2. wyniki.dzien,
  3. wyniki.numery_zamowien AS zamowienia_w_dniu,
  4. TRUNCATE( wyniki.srednia + 0.0051,2 ),
  5. group_concat( z.nr_zam ) AS szukane_zamowienia
  6. FROM ( SELECT
  7. group_concat( z.nr_zam ) AS numery_zamowien,
  8. avg( z.wartosc_zam ) AS srednia,
  9. DATE_FORMAT( z.data_zam, '%d %M' ) AS dzien
  10. FROM zamowienia AS z
  11. WHERE z.data_zam > '2008-01-01'
  12. GROUP BY
  13. to_days( z.data_zam )
  14. ) AS wyniki
  15.  
  16. LEFT JOIN zamowienia AS z ON FIND_IN_SET( z.nr_zam, wyniki.numery_zamowien )
  17.  
  18. WHERE z.wartosc_zam > wyniki.srednia
  19.  
  20. GROUP BY
  21. to_days( z.data_zam )

jestem pewien, że można optymalniej (zapytanie na 1019 testowych rekordach wykonywało się u mnie 0.2 sekundy)
kitol
nie sprawdzane:

  1. SELECT z.* FROM zamowienia z
  2. JOIN (SELECT data_zam , AVG(wartosc_zam) AS srednia FROM zamowienia GROUP BY data_zam) sr USING(data_zam)
  3. WHERE z.data_zam>'2008-01-01' AND z.wartosc_zam>sr.srednia
Łukasz O.
niestety Twoje zapytanie nie zwróci wyników a nawet jeśli, to zakładając, że data zamówienia to timestamp to podane zapytanie pogrupuje tylko te złożone w tym samym momencie (z daty trzeba wyodrębnić dzień)
kitol
nie określiłeś wcześniej formatu daty. Jeżeli masz rrrr-mm-dd hh:mm:ss to data_zam zmień wszędzie na LEFT(data_zam,10).
Jeżeli masz timestamp to dodatkowo w zapytaniu przekonwertuj to na rrrr-mm-dd za pomocą funkcji FROM_UNIXTIME().

Najlepiej wklej tutaj strukturę tabeli i kilka przykładowych rekordów, bo chyba nikt na forum nie ma zdolności przewidywania jak to u ciebie wygląda.
zawias
  1. SELECT z . *
  2. FROM zamowienia z
  3. JOIN ( SELECT data_zam, AVG( wartosc_zam ) AS srednia
  4. FROM zamowienia WHERE data_zam
  5. IN (
  6.  
  7. SELECT DISTINCT data_zam
  8. FROM zamowienia
  9. )
  10. GROUP BY data_zam
  11. )sr
  12. USING ( data_zam )
  13. WHERE z.wartosc_zam > sr.srednia AND data_zam>'2000-01-01';



podumalem i przerobilem troszke kod... dalem distinct zeby wyciagnac srednie wartosci faktur dla danego dnia... data_zam to zwykly DATE 'RRRR-MM-DD'. Wielkie dzieki za pomoc!!!
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.