Domanda

Ho 2 tabelle, utilizzando un join interno per interrogare loro.

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ?

Conta gli ID di voci sui rapporti tra 2 date. Tabella 1 contiene informazioni sulle relazioni (data, groupid ecc), Table2 contiene le voci sulle relazioni.

Mi piacerebbe fare una query quasi esattamente lo stesso, tranne che seleziona solo gli ID del rapporto con la data più recente, tra queste 2 date.

Qualcuno può aiutarmi? Non riesco a ottenere la mia testa intorno MAX (data) digitare le query -. Tutto quello che ottiene è di nuovo un conteggio di ogni id e anche la data massima, piuttosto che solo gli ID dalla data max

Grazie,


Ho pensato forse una query SQL nidificate - si può fare questo? Posso trovare riferimenti su Google, ma non riesco a farlo funzionare ... Qualcosa di simile a:

SELECT COUNT(table2.id) 
FROM table2 
INNER JOIN table1 ON table2.relazioneid = table1.id 
WHERE table1.date > ? AND table1.date < ? AND 
(
    SELECT MAX(date) 
    FROM table1 
    WHERE date > ? AND date < ?
)

Non riesco a ottenere quello per funzionare, però, e quando cerco di testare in phpMyAdmin, mi dà dei calci fuori con un errore che mi dice il mio utente non dispone di privilegi SELECT. Strano, dal momento che si tratta di un server di prova sono connesso in come root.

È stato utile?

Soluzione

Senza ulteriori informazioni riguardanti la struttura delle tabelle, vorrei suggerire di provare qualcosa di simile:

SELECT t2.id
FROM table1 t1
INNER JOIN table2 t2 ON t1.id = t2.relation_id
WHERE t1.date BETWEEN ? AND ?
HAVING MAX(t1.date)

Non ho provato questo ma dovrebbe puntare in una direzione si potrebbe andare con questo problema. Il tuo altro suggerimento di utilizzare un subquery è valido e potrebbe funzionare qualcosa di simile:

SELECT *
FROM table2 t2 
WHERE t2.parent_id IN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
)

O in un join in una tabella temporanea:

SELECT *
FROM table2 t2
INNER JOIN (
    SELECT t1.relation_id
    FROM table1 t1
    WHERE t1.date BETWEEN ? AND ?
    GROUP BY t1.relation_id
    HAVING MAX(t1.date)
) AS t1 ON t2.relation_id = t1.relation_id

Altri suggerimenti

 ...WHERE table1.date BETWEEN'2009-01-01' AND '2009-01-02' ORDER BY table1.date LIMIT 10

ti porterà 10 prime file con le date

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top