2012-04-27 21 views
7

Ho svolto ricerche su questo problema, ma ho difficoltà a trovare una soluzione.MySQL: numero limite di risultati ricevuti in base a un valore di colonna | Combinazione di query

Ho la seguente query che mi dà un elenco di s "some_id":

SELECT some_id FROM example GROUP BY some_id 

E ho la seguente query che otterrà una lista delle 5 voci più recenti per una riga che ha " some_id "uguale a un numero.

SELECT * FROM example 
WHERE some_id = 1 
ORDER BY last_modified DESC 
LIMIT 5 

Come posso ottenere le prime 5 voci più recenti dalla tabella "esempio" per ogni "some_id", utilizzando una sola domanda? Se ci sono meno di 5 voci per un "some_id", va bene includerle, se questo rende le cose meno complesse.

Grazie mille!

+0

"Ho fatto su questo problema, ma sto avendo problemi a trovare una soluzione. " Veramente? Una domanda quasi identica è stata già pubblicata centinaia di volte solo su StackOverflow. http://stackoverflow.com/questions/tagged/greatest-n-per-group+mysql Sono sicuro che se guardi abbastanza puoi trovare qualcosa che puoi usare. –

risposta

8

trovato la risposta quando si guarda la prima risposta nel seguente post:

How do I limit the number of rows per field value in SQL?

ho modificato per soddisfare le mie esigenze specifiche: ricerca

SELECT * FROM 
(
    SELECT *, @num := if(@some_id = some_id, @num := @num + 1, 1) as row_num, 
      @some_id := some_id as some_id 
    FROM example 
    ORDER BY last_modified DESC 
) as e 
WHERE row_num <= 5 
+0

Ho trovato che dovevo aggiungere l'inizializzazione delle variabili: 'SELECT ... FROM example, (SELECT @some_id: = 0, @num: = 0) come init ...' – Mortimer

+0

Questa risposta non funziona – Green

+0

Hai dovuto menzionare che questo approccio non funziona senza la clausola 'ORDER BY'. – Green

-2

Hi Utilizzare Group by e having clause per limite di controllo per ogni id ..

SELECT * FROM `example` 
GROUP BY some_id 
HAVING count(*) <= 5 
ORDER BY last_modified DESC 

Controllerà per ogni some_id e verificare se number of rows for some_id is <=5 allora sarà risultato del display.

+0

Definitivamente non funziona – Green

Problemi correlati