Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wybranie n wierszy z grupy
Pyton_000
post 20.10.2014, 09:19:08
Post #1





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Ciemnota opanowała smile.gif

Tabela i dane:
  1. CREATE TABLE `easy_shop_prices` (
  2. `id` INT(11) NOT NULL AUTO_INCREMENT,
  3. `price_type_id` INT(11) NULL DEFAULT NULL,
  4. `article_id` INT(10) UNSIGNED NULL DEFAULT NULL,
  5. `price` DECIMAL(12,2) NULL DEFAULT NULL,
  6. `update_time` INT(11) NULL DEFAULT NULL,
  7. `user_id` INT(11) NULL DEFAULT NULL,
  8. PRIMARY KEY (`id`)
  9. );
  10.  
  11. INSERT INTO `easy_shop_prices` (`id`, `price_type_id`, `article_id`, `price`, `update_time`, `user_id`) VALUES
  12. (254, 1, 177, 150.00, 1410261095, 1);
  13. (255, 2, 177, 130.00, 1410261096, 1),
  14. (256, 3, 177, 100.00, 1410261096, 1),
  15. (257, 1, 177, 2134.00, 1412581952, 1),
  16. (258, 3, 177, 120.00, 1410261093, 1),
  17. (259, 1, 177, 300.00, 1412581952, 1),
  18. (260, 3, 177, 99.00, 1410261096, 1);


Wynik oczekiwany:
Chcę 2 rekordy z każdej grupy (price_type_id) o najwyższym update_time.

Może ogólnie ktoś ma jakieś w miarę uniwersalne rozwiązanie.
Go to the top of the page
+Quote Post
redeemer
post 20.10.2014, 10:14:22
Post #2





Grupa: Zarejestrowani
Postów: 915
Pomógł: 210
Dołączył: 8.09.2009
Skąd: Tomaszów Lubelski/Wrocław

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


Może pomoże: http://www.xaprb.com/blog/2006/12/07/how-t...r-group-in-sql/


--------------------
Go to the top of the page
+Quote Post
mmmmmmm
post 20.10.2014, 10:14:56
Post #3





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

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


Np. tak: http://sqlfiddle.com/#!2/ed5b2/2
Tak jest prawidłowo - po ANSI-SQL-owemu.
Można też na zmiennych zrobic.
Go to the top of the page
+Quote Post
Pyton_000
post 23.10.2014, 10:12:02
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Po drobnej zmianie śmiga fajnie smile.gif
Potrzebowałem sortowania po update_time a nie price
  1. SELECT * FROM (
  2. SELECT *, (SELECT count(*) FROM `easy_shop_prices` WHERE e.`price_type_id`=`easy_shop_prices`.`price_type_id` AND `easy_shop_prices`.`update_time`>=e.`update_time`) lp FROM `easy_shop_prices` e
  3. ) sub
  4. WHERE lp<=2


Hmm... Jednak nie zadziałało tak jak chciałem.
Danych mam trochę więcej ale w sumie źle że nie podałem bardziej zróżnicowanych.

http://sqlfiddle.com/#!2/81379e/1/0
Dodałem więcej danych.
Docelowo chciałbym z całego setu dostać wynik dla konkretnego produktu np. article_id = 177 przy założeniach jw. czyli 2 ostatnie ceny o najwyższych czasach aktualizacji dla każdej price_type_id

Nie za dużo bym chciał ? smile.gif
Go to the top of the page
+Quote Post
nospor
post 23.10.2014, 10:31:39
Post #5





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




Cytat
Nie za dużo bym chciał ?
Ty zawsze chcesz za duzo wink.gif

  1. SELECT * FROM (
  2. SELECT *, (SELECT count(*) FROM `easy_shop_prices` WHERE easy_shop_prices.article_id = 177 AND e.article_id = 177 AND e.`price_type_id`=`easy_shop_prices`.`price_type_id` AND `easy_shop_prices`.`price`<=e.`price`) lp FROM `easy_shop_prices` e
  3. ) sub
  4. WHERE lp<=2 AND lp>0

Cos takiego?


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

"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
trueblue
post 23.10.2014, 10:46:21
Post #6





Grupa: Zarejestrowani
Postów: 6 799
Pomógł: 1827
Dołączył: 11.03.2014

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


  1. SELECT price_type_id,price,update_time FROM
  2. (SELECT IF(@poprzedni<>price_type_id,@numer:=1,@numer:=@numer+1) AS licznik, @poprzedni:=price_type_id,price_type_id,price,update_time FROM easy_shop_prices,(SELECT @numer:=0,@poprzedni:='') AS init WHERE article_id=177 ORDER BY price_type_id,update_time DESC) AS tmp
  3. WHERE licznik<=2


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post 23.10.2014, 12:06:21
Post #7





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


nospr co ja poradzę że zachłanny jestem haha.gif
Twoje rozwiązanie nie działa tak jak chciałem ponieważ pobierasz najniższe ceny a mi potrzeba najwyższe czasy dodania (update_time).
Sam też kombinowałem w podobny sposób.

@trueblue Wygląda że Twoje rozwiązanie działa świetnie. smile.gif
Go to the top of the page
+Quote Post
nospor
post 23.10.2014, 12:11:04
Post #8





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




@Pyton ja tylko zmodyfikowalem podane przez ciebie zapytanie w linku. NIe moja wina, ze tam sortowales po cenie a nie czasie.... wystarczy ze to poprawisz i bedzie tak jak ma byc.


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

"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
Pyton_000
post 23.10.2014, 12:21:31
Post #9





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Nie ;P W post wkleiłem zapytanie które "działało" ale dla setu podanego w 1szym poście,
na sqlfiddle podałem rozwiązanie mmmmmmm z dodanym większym setem danych.
smile.gif

Czepiam się ;P
Go to the top of the page
+Quote Post
nospor
post 23.10.2014, 12:25:17
Post #10





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




No i wlasnie pracowalem na sqlfiddle, skoro jego podales jako zbior danych. Uznalem, ze masz tam zapytanie jakie chcesz miec i prosisz o jego rozbudowe. Wystarczy wiec ze zmienisz tam sortowanie na jakie chcesz i bedziesz mial to co chcesz.


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

"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
Pyton_000
post 23.10.2014, 13:07:47
Post #11





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Zmieniając sortowanie nie wypluwa poprawnych wyników.
Go to the top of the page
+Quote Post
nospor
post 23.10.2014, 13:11:28
Post #12





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




Mogę zobaczyc kod po zmianach?


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

"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

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: 16.06.2025 - 21:58