Twoje PC  
Zarejestruj się na Twoje PC
TwojePC.pl | PC | Komputery, nowe technologie, recenzje, testy
B O A R D
   » Board
 » Zadaj pytanie
 » Archiwum
 » Szukaj
 » Stylizacja

 
M E N U
  0
 » Nowości
0
 » Archiwum
0
 » Recenzje / Testy
0
 » Board
0
 » Rejestracja
0
0
 
Szukaj @ TwojePC
 

w Newsach i na Boardzie
 
OBECNI NA TPC
 
 » rooter666 11:27
 » emigrus 11:21
 » myszon 11:20
 » metacom 11:16
 » Sherif 11:15
 » Chrisu 11:11
 » ngP 11:11
 » yeger 11:09
 » Killer 11:08
 » Qjanusz 11:00
 » adolphik 10:59
 » JE Jacaw 10:56
 » pawcio 10:52
 » rainy 10:50
 » ligand17 10:49
 » sofolok 10:44
 » Bonifacyz 10:44
 » jablo 10:40
 » Artaa 10:35
 » john565 10:23

 Dzisiaj przeczytano
 36904 postów,
 wczoraj 25433

 Szybkie ładowanie
 jest:
włączone.

 
ccc
TwojePC.pl © 2001 - 2025
A R C H I W A L N A   W I A D O M O Ś Ć
    

zadanie dla masterów SQL - jak najefektywniej zrobić takie zapytanie? , kubazzz 7/05/09 19:45
mamy tabelę
id | title | text | category | date

chcę wybrać:
wszystkie dane [cały wiersz - id, title, text ... ] dla najnowszego wpisu, po jednym dla każdej kategorii, posortowane wg kategorii rosnąco.

czyli żebym dostał w wyniku najnowszy wpis dla kategorii 1, 2, 3 i ile ich tam będzie.

Da się to zrobić w jednym zapytaniu?

SM-S908

  1. sprawdz , Deus ex machine 7/05/09 19:49
    select distinct category, id, title, date from tabela group by category order by category, date asc;

    moze zadziala

    "Uti non Abuti"

    1. prawie , kubazzz 7/05/09 19:58
      ale nie wybiera najnowszych

      SM-S908

  2. moze tak , gorii 7/05/09 20:37
    select tb1.id, tb1.title, tb1.text, tb1.category, tb1.date
    from tabela tb1
    where tb1.date = ( select max(tb2.date) from tabela tb2 where tb1.category = tb2.category )

    1. albo tak , bwana 7/05/09 22:51
      select a.* from
      tb1 a,
      (select tb1.category, max(tb1.date) from tb1) b
      where a.category=b.category and a.date=b.date

      podobnie jak w przypadku selekta podanego przez gorii nie gwarantuje podania (tylko) jednego, najnowszego artykułu. Jeśli w danej kategorii pojawią się dwa artykuły z tą samą datą, to oba zapytania zwrócą w tej kategorii nie jeden, lecz dwa artykuły.

      Co do wydajności, to trudno powiedzieć. Domyślam się, że chodzi o MySQL, którego nie znam. Na Oracle użyłbym funkcji analitycznej, a na PostgresSQL zasymulowałbym funkcję analityczną funkcją napisaną pn. w pgplsql (być może to samo można zrobić w MySQL? wydaje mi się, że nie, ale może...)

      Dużo zależy od indeksów i od optymalizatora. Jeżeli jest dużo artykułów, mało kategorii i kiepski optymalizator, to przykład gorii będzie wolniejszy (dużo podzapytań). Jeżeli jest dużo kategorii, mało artykułów a optymalizator dobry, to przykład gorii ma szanse być szybszy. I piszę teoretycznie, bo MySQL znam z nazwy.

      "you don't need your smile when I cut
      your throat"

    
All rights reserved ® Copyright and Design 2001-2025, TwojePC.PL