Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SQL] Problem z unikatowymi rekordami
Forum PHP.pl > Forum > Bazy danych
Ważka
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
nospor
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
Ważka
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
JaRoPHP
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...
Ważka
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
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.