Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [SQL] Problem z unikatowymi rekordami
Ważka
post
Post #1





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 18.12.2006

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


Witam,

Mam problem z zapytaniem sql - moze ktos z forum mi pomoze. Z gory dzieki za pomoc smile.gif

Mam taka tabele z notowania gieldowymi:

time | data | czas | name | wartosc
1165937702 | 2006-12-12 | 16:35:01 | TECHWIG | 1244.79
1165937701 | 2006-12-12 | 16:35:00 | MIDWIG | 3858.31
1165937701 | 2006-12-12 | 16:35:00 | TECHWIG | 1244.79
1165937670 | 2006-12-12 | 16:34:30 | TECHWIG | 1244.79
1165937642 | 2006-12-12 | 16:34:01 | WIG | 51747.14
1165937641 | 2006-12-12 | 16:34:00 | MIDWIG | 3858.31
1165937641 | 2006-12-12 | 16:34:00 | TECHWIG | 1244.79
1165937611 | 2006-12-12 | 16:33:30 | TECHWIG | 1244.79
1165937581 | 2006-12-12 | 16:33:01 | WIG | 51747.14

W tabeli sa jeszcze inne notowania name, ale u gory dla przykladu wylistowalem tylko te, o ktore mi chodzi i jak sie one dubluja w czasie.

Chcialbym wyswietlic rekordy z name WIG, TECHWIG, MIDWIG, ktore maja najwieksza date, czyli te ktore sa najswiezsze. Te 3 rekordy chcialbym uzyskac oczywiscie w 1 zapytaniu. Stosuje tutaj m.in.

  1. SELECT * FROM tabela WHERE name IN ('WIG', 'TECHWIG', 'MIDWIG') ORDER BY time DESC LIMIT 3


Stosuje tutaj rozne kombinacje zapytania np. z DISTINCT na poczatku zapytania uzywajac funkcji ORDER BY na koncu, ale zawsze dochodzi do sytuacji, ze dubluja mi sie notowania np. dostaje 2 razy TECHWIG i raz MIDWIG, a WIG juz nie dostalem...

Probowalem tez uzyc GROUP BY name, ale pokazuje mi rekordy ktore sa najstarsze, a nie najswiezsze - dodanie ORDER BY oczywiscie nic tutaj nie pomaga :|

Moze ktos ma pomysl jak szloby takie zapytanie zmienic?

Z gory dziekuje za ewentualna pomoc smile.gif
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




widze ze jako tako jestes obcykany w temacie, wiec rzuce ci slowami kluczowymi. czesc sie pokrywa z tymi co masz, ale o paru zapomniales:
group by, having, max(polezdata)
smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Ważka
post
Post #3





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 18.12.2006

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


Dzieki za podpowiedz, ale dalej nie umiem znalesc rozwiazania - szczegolnie gdy operuje na tabeli zawierajacej notowania kilkuset spolek i wszystko jest poplatane w czasie to rekordy z unikatowa nazwa sie powtarzaja :|

Nawet uzywajac zapytan zagniezdzony GROUP BY z nalozonym warunkiem HAVING tez nic... Problem w tym ze GROUP BY zawsze wysietla mi najstarsze rekordy z dana nazwa, a jak uzyje maksymalnego dnia w zapytaniu to wyswietli rekordy z najwczesniejsza godzina.., a nie z terazniejsza sad.gif
Go to the top of the page
+Quote Post
JaRoPHP
post
Post #4





Grupa: Zarejestrowani
Postów: 675
Pomógł: 15
Dołączył: 7.11.2004
Skąd: Katowice

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


Proponuje takie zapytnie:
  1. SELECT `data`, `name`, `wartosc`, `czas`, max(`time`) AS `time`
  2. FROM spolki WHERE name IN ('WIG', 'TECHWIG', 'MIDWIG')
  3. GROUP BY `name`
  4. ORDER BY `data` DESC;

Ale przyznaję, że nie do końca rozumiem strukturę Twojej tabeli...


--------------------
Kto pyta, nie błądzi...
Kto zbłądził, ten pyta...
Go to the top of the page
+Quote Post
Ważka
post
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 18.12.2006

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


Dziekuje JaRoPHP smile.gif Przerobilem zapytanie na swoje potrzeby i dziala winksmiley.jpg Chodzilo tutaj wlasnie o uzycie max(data), max(czas) przed sekcja FROM, gdy uzywam GROUP BY winksmiley.jpg
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 Aktualny czas: 20.08.2025 - 10:38