Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13

Discussione: Query join SQL

  1. #1

    Query join SQL

    Ciao a tutti,
    quesito di base ma per me importantissimo...
    Ho due tabelle diciamo
    tabella1 (utenti) con anagrafica
    tabella2 (accessi) con gli accessi giornalieri degli utenti
    la tabella2 e' legata alla tabella1 da una chiave esterna

    Vorrei riuscire a fare una query di tipo join in cui per ogni utente della tabella1 prendo un solo record della tabella2 con la data piu recente (ipotizzando che la tabella2 abbia un campo di tipo data)

    lo so e' una domanda stupida ma mi sto impiccando....
    grazie in anticipo

  2. #2
    prova ma non garantisco perche' te la scrivo al volo ... uscendo di casa....
    codice:
    select *, max(a.id) as id1
    from accessi a
    left join utenti u ON a.id_user = u.id_user
    group by a.id_user
    having a.id = id1

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  3. #3
    ...non funge...

    ho provato di tutto ma nulla.....
    aiuto vi prego e' importantissimo!!!

  4. #4
    Originariamente inviato da dread23
    ...non funge...

    ho provato di tutto ma nulla.....
    aiuto vi prego e' importantissimo!!!
    il raggruppamento servea raggruppare, non a scegliere dei record specifici.

    Inoltre bisogna conoscere bene la struttura delle tabelle per capire se e' fattibile oppure no una query del tipo che ho postato... se fai caso al max(id) .... di quale tabella sia e se esiste ????

    Altra soluzione e' la solita tabella temporanea....

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5
    La situazione semplificando e' questa:

    Tabella Utenti
    id
    nome
    cognome

    Tabella Accessi
    id
    id_utente
    data_accesso

    Vorrei sapere per ogni utente qual'e' la data dell'ultima volta che e' entrato
    EDITO:
    Per ogni utente mi serve un solo record perche probabilmente sara' entrato piu di una volta

    Eventualmente aggiungere un altra condizione (tipo id_utente > numero)

    grazie mille

  6. #6
    sarebbe pure interessante vedere la query che hai effettivamente usato.

    edit... ed anche il formato della data usato.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2002
    Messaggi
    35
    Originariamente inviato da dread23
    La situazione semplificando e' questa:

    Tabella Utenti
    id
    nome
    cognome

    Tabella Accessi
    id
    id_utente
    data_accesso

    Vorrei sapere per ogni utente qual'e' la data dell'ultima volta che e' entrato

    Eventualmente aggiungere un altra condizione (tipo id_utente > numero)

    grazie mille
    Sono un po' arrugginito però qualcosa di questo genere
    select data_accesso from utenti, accessi where id_utente=utenti.id sort data_accesso
    e prelevi per l'appunto la data solo della prima riga.
    Magari l'ordinamento è al contrario...
    Fidarsi è bene... non fidarsi e meglio! Compro/Vendo solo ed escusivamente con consegna a mano!<br>
    Rifiutare la preinstallazione di Windows XP? Ora puoi

  8. #8
    La query e' questa:

    SELECT DISTINCT
    agenzie.id,
    agenzie.nome,
    gara_buche.buche_fatte,
    gara_buche.`data` AS data_buca
    FROM
    agenzie
    INNER JOIN gara_buche ON (agenzie.id=gara_buche.id_agenzia)
    WHERE
    (gara_buche.buca = '3')
    GROUP BY
    agenzie.nome,
    ORDER BY
    gara_buche.buche_fatte DESC

    la situazione reale e':

    tabella anagrafica>>>statica
    tabella dove registro gli eventi>>>dinamica

    primo giorno, l'agenzia x entra scrive un record e i punti che fa in quel giorno vengono registrati sullo stesso record giornaliero
    se entra il giorno dopo vado a prendere l'ultimo record utile e riscrivo un nuovo record con i punti della volta prima (per avere uno storico di quello che e' successo durante tutto il gioco) e in quel giorno aggiorno sempre sul record appena creato e cosi via...

    eseguo la query oggi e per ogni agenzia ho 2/3/100 record (uno per ogni giorno in cui sono entrati) a me servirebbe solo il piu recente sulla tabella dinamica (gara_buche) per sapere ogni agenzia quante buche ha fatto fino ad ora...

    la clausola
    WHERE
    (gara_buche.buca = '3')
    ignoratela perche il gioco e' diviso in piu round che cambiano nel corso del tempo

    grazieeeeeeee

    edit: il formato della data e' un date es: 2005-11-09

  9. #9
    se devi fare un insert oppure un update probabilmente deve gestire un record per volta. Quindi tanto vale che fai un

    ORDER BY data DESC
    LIMIT 1

    Lasciando perdere DISTINCT e GROUP BY. Tra l'altro con GROUP BY non serve usare DISTINCT (nota a margine).


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10
    Select u.nome, u.cognome, a.id_utente, max(a.data_accesso) from utenti as u INNER JOIN accessi as a ON u.id = a.id group by a.id_utente;
    oppure usa le tabelle temporanee.
    Un uomo è vecchio solo quando i rimpianti, in lui, superano i sogni. A. Einstein

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.