Visualizzazione dei risultati da 1 a 5 su 5

Discussione: problema query

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    52

    problema query

    ho una tabella di questo genere:
    id tipo dal
    1 A 31/12/2014
    3 B 12/01/2015
    2 C 11/02/2015
    2 D 07/04/2015
    1 E 30/04/2015
    3 F 12/09/2015

    la query che non riesco a fare dovrebbe darmi come risultato un solo id per ogni numero, ordinato per la data più recente e mi dovrebbe restituire anche la lettera corrispondente, in pratica questo:

    id tipo dal
    2 D 07/04/2015
    1 E 30/04/2015
    3 F 12/09/2015

    Possibilmente il tutto riordinato in modo decrescente per id:

    id tipo dal
    1 E 30/04/2015
    2 D 07/04/2015
    3 F 12/09/2015

    Non riesco a farlo, c'è qualcosa che mi sfugge, qualcuno è in grado di aiutarmi? magari senza l'ausilio delle inner join?

  2. #2
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da gpinodj Visualizza il messaggio
    ..... magari senza l'ausilio delle inner join?
    Sembra facile ma in effetti ha la sua complicazione ingannevole .......
    ma perché non vuoi usare i join ??

    devi andare di sottoquery e preoccuparti che le sottoquery restituiscano 1 solo record

    poi c'è un problema di fondo
    - Immaginiamo che il "id" 2 abbia tre valori identici di "dal più recente"
    - a questi tre valori corrispondono tre "tipo" diversi fra di loro
    - Quale dei tre "tipo" prendi ?????? se tu vuoi un solo "id" .........


    Quella sotto potrebbe essere una bozza che non considera i duplicati certamente migliorabile e da adattare al tuo DB
    codice:
    SELECT DISTINCT 
    X.id, 
    (SELECT Max(Y.dal) FROM T1 AS Y WHERE (Y.Id = X.id)) AS dal2, 
    (SELECT K.tipo FROM T1 AS K WHERE (K.id = X.id) AND (K.dal =   (SELECT Max(Y.dal) FROM T1 AS Y WHERE (Y.Id = X.id))  )) AS tipo2 
    FROM 
    T1 AS X 
    ORDER BY X.id
    ;
    Ultima modifica di nman; 29-11-2015 a 11:23

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    52
    Quote Originariamente inviata da nman Visualizza il messaggio
    Sembra facile ma in effetti ha la sua complicazione ingannevole .......
    ma perché non vuoi usare i join ??

    devi andare di sottoquery e preoccuparti che le sottoquery restituiscano 1 solo record

    poi c'è un problema di fondo
    - Immaginiamo che il "id" 2 abbia tre valori identici di "dal più recente"
    - a questi tre valori corrispondono tre "tipo" diversi fra di loro
    - Quale dei tre "tipo" prendi ?????? se tu vuoi un solo "id" .........


    Quella sotto potrebbe essere una bozza che non considera i duplicati certamente migliorabile e da adattare al tuo DB
    codice:
    SELECT DISTINCT 
    X.id, 
    (SELECT Max(Y.dal) FROM T1 AS Y WHERE (Y.Id = X.id)) AS dal2, 
    (SELECT K.tipo FROM T1 AS K WHERE (K.id = X.id) AND (K.dal =   (SELECT Max(Y.dal) FROM T1 AS Y WHERE (Y.Id = X.id))  )) AS tipo2 
    FROM 
    T1 AS X 
    ORDER BY X.id
    ;
    e se volessi usare i join?

  4. #4
    Utente di HTML.it L'avatar di nman
    Registrato dal
    Jan 2011
    residenza
    Milano
    Messaggi
    1,333
    Quote Originariamente inviata da gpinodj Visualizza il messaggio
    e se volessi usare i join?
    Ahhh!!!
    dopo più di 1 mese ti sei ricordato ........
    - tutte le osservazioni fatte --> irrilevanti
    - se la prima proposta va bene o no --> irrilevante
    - dirci il DB che usi --> irrilevante
    e va bo!... quasi quasi mi sembra di avere a che fare con le mie figlie
    codice:
    SELECT 
    T1.id, T1.dal, T1.tipo 
    FROM 
    T1 
    INNER JOIN 
    (SELECT T1.id, Max(T1.dal) AS dal2 FROM T1 GROUP BY T1.id) AS K 
    ON 
    (T1.id = K.id) AND (T1.dal = K.dal2) 
    ORDER BY T1.id DESC
    ;
    Ultima modifica di nman; 13-01-2016 a 03:57

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2014
    Messaggi
    52
    Quote Originariamente inviata da nman Visualizza il messaggio
    Ahhh!!!
    dopo più di 1 mese ti sei ricordato ........
    - tutte le osservazioni fatte --> irrilevanti
    - se la prima proposta va bene o no --> irrilevante
    - dirci il DB che usi --> irrilevante
    e va bo!... quasi quasi mi sembra di avere a che fare con le mie figlie
    codice:
    SELECT 
    T1.id, T1.dal, T1.tipo 
    FROM 
    T1 
    INNER JOIN 
    (SELECT T1.id, Max(T1.dal) AS dal2 FROM T1 GROUP BY T1.id) AS K 
    ON 
    (T1.id = K.id) AND (T1.dal = K.dal2) 
    ORDER BY T1.id DESC
    ;
    Purtroppo per lavoro ho dovuto lasciare il progetto in questione, comunque il primo codice l'ho adattato alle mie esigenze e funziona il secondo era una mia curiosità, uso phpmyadmin. proverò appena avro un po di tempo libero il secondo codice un ogni caso grazie di tutto

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.