![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 78 Dołączył: 4.11.2008 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam problem z ułożeniem zapytania. Upraszczając problem jak się da: Mam tabelę klienci, z polami id_klienta, id_sprzedawcy, data_rejestracji Potrzeba mi zapytanie, które wyciągnie 10 sprzedawców , którzy NAJSZYBCIEJ zarejestrowali 50 klientów do konkretnej daty (czyli np Józek ma 50 klientów, ale 1 zarejestrował we środę, a liczymy do wtorku więc się nie kwalifikuje). Klientów może być więcej niż 50, liczą się najszybciej zarejestrowani (najniższa data_rejestracji) Głowię się nad tym już chwilę i nie mam pomysłu jak zrobić to na jednym zapytaniu Ten post edytował zordon 15.04.2011, 10:53:18 |
|
|
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 194 Pomógł: 26 Dołączył: 9.01.2011 Skąd: /dev/null Ostrzeżenie: (0%) ![]() ![]() |
hmmm
![]() Teoretycznie pogrupuje po id_sprzedawcy i dla kazdej grupy wyciagnie date rejestracji ostatniego z klientow i posortuje po niej |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 78 Dołączył: 4.11.2008 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
@ylk dobrze kombinujesz, ale Twoje rozwiązanie wykłada się na dokładnie tym samym problemie co wymyślone przeze mnie:
Jeśli sprzedawca A ma 51 zarejestrowanych klientów a sprzedawca B 50 to zapytanie weźmie pod uwagę ten 51 rekord, który już nie powinien się liczyć. Jeśli 50 rekord A < 50 rekord B ale 51 rekord A > 50 rekord B - kolejność będzie nieprawidłowa ![]() |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
nie gwarantuję gdyż nie mam danych do sprawdzenia ;p - ale coś w deseń (musisz sobie podmienić LIMIT_DATY - jeszcze zależy w jakim formacie masz datę)
Ten post edytował zegarek84 15.04.2011, 14:06:14 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 49 Pomógł: 7 Dołączył: 2.04.2011 Skąd: Wawa Ostrzeżenie: (0%) ![]() ![]() |
A spróbuj czegoś takiego
Sortuje wyniki według 50-tej daty w tabeli klient i wybierze tylko sprzedawców którzy zarejestrowali więcej klientów niż 50 Edit... @zegarek84 dzięki za zwrócenie uwagi na blad Przeniesienie count() z WHERE do HAVING Ten post edytował auto-all 15.04.2011, 14:29:56 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 332 Pomógł: 294 Dołączył: 12.10.2008 Skąd: Olkusz Ostrzeżenie: (0%) ![]() ![]() |
Sortuje wyniki według 50-tej daty w tabeli klient i wybierze tylko sprzedawców którzy zarejestrowali więcej klientów niż 50 chyba, że dat rejestracji u danego sprzedawcy będzie poniżej 50 - czasami w niektórych bazach danych null'a potrafi dać u góry ![]() [edit] - sorka masz w warunku count więc poprawnie policzy ;] [edit] - a jednak masz błąd gdyż count jest funkcją agregowalną i warunek powinien znajdować się w HAVING wtedy powinno zadziałać ;] ale, rzeczywiste ja lekko się zapędziłem, gdyż nie potrzebnie dałem count - można prościej:
[EDIT] dorzuciłem jeszcze DISTINCT przy k1.id_sprzedawcy gdyż ta kolumna wygląda na powtarzalną ;] Ten post edytował zegarek84 15.04.2011, 14:54:24 -------------------- Jeśli twoja ręka rusza do przodu powstrzymaj swój gniew; gdy wyprzedza cię twój gniew - wycofaj rękę.
|
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 358 Pomógł: 78 Dołączył: 4.11.2008 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
Ostatecznie poradziłem sobie sam (tzn nie znalazłem jeszcze błędów
![]() Wasze rozwiązania potestuję i zobaczę, które jest najwydajniejsze (docelowo baza ma mieć kilkadziesiąt tysięcy rekordów, a dla uproszczenia wywaliłem parę rzeczy). Moje rozwiązanie wygląda PODOBNIE (mogłem walnąć się przy zmianie nazw kolumn, wycinaniu joinów itp - w każdym razie w oryginale działa ![]()
Dzięki za zainteresowanie i pomoc! Ten post edytował zordon 15.04.2011, 14:40:08 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 14.08.2025 - 09:53 |