Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    433

    select 2 valori stessa tabella in base a gruppo

    ciao
    ho una tabella viaggio

    VIAGGIO
    viaggio_id
    viaggio_anno
    viaffio_data
    e vari campi

    e una tabella
    ORDINE
    ordine_id
    ordine_anno
    id_viaggio
    anno_viaggio
    ritiro (stringa)
    consegna (stringa)
    sequenza ( intero che determina l'ordine degli ordini all'interno del viaggio)

    ora per ogni viaggio ci possono essere più ordini e devo estrarre una griglia
    con
    viaggio_id, viaggio_anno, viaggio_data,ritiro,consegna

    dove ritiro è il primo ritiro dell' ordine in base al valore minimo di sequenza e
    consegna è la consegna dell' ultimo ordine in sequenza

    giuro che non riesco

    spero di avervi dato tutte le info necessarie...

    5 euro (paypal) per uno sprizt a chi me la risolve
    Donerò loro dei fiori... poiché... sotto le nuvole... tutto è così rozzo e sporco

  2. #2
    1. quale db usi? (va indicato come da regolamento)
    2. un esempio dei dati che hai e di come vorresti l'output (in base agli stessi dati)

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    io, per iniziare, proverei una cosa del genere....ma aspetta sempre optime!

    codice:
    select
    viaggio.viaggio_id
    ,viaggio.viaggio_anno
    ,viaggio.viaggio_data
    ,(select first 1 ordine.ritiro   from ordine where ordine.id_viaggio=viaggio.viaggio_id order by ordine.sequenza asc) ritiro
    ,(select first 1 ordine.consegna from ordine where ordine.id_viaggio=viaggio.viaggio_id order by ordine.sequenza desc) consegna
    from viaggio

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2004
    Messaggi
    433
    scusate ho dimenticato di mettere le info
    il DB è MYSQL

    comunque ho provato la query di
    123delphi321 provato e mi dava errore su first 1 quindi ho messo LIMIT 1 subito dopo ogni sub query e sembra funzionare

    select
    vviaggio.idvviaggio
    ,vviaggio.anno
    ,vviaggio.data_competenza
    ,(select vordine.ritiroda from vordine where vordine.viaggio_num=vviaggio.idvviaggio order by vordine.ordine_viaggio asc LIMIT 1) ritiro
    ,(select vordine.consegnaa from vordine where vordine.viaggio_num=vviaggio.idvviaggio order by vordine.ordine_viaggio desc LIMIT 1) consegna
    from vviaggio
    Donerò loro dei fiori... poiché... sotto le nuvole... tutto è così rozzo e sporco

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da Urbanus Visualizza il messaggio
    scusate ho dimenticato di mettere le info
    il DB è MYSQL

    comunque ho provato la query di
    123delphi321 provato e mi dava errore su first 1 quindi ho messo LIMIT 1 subito dopo ogni sub query e sembra funzionare

    select
    vviaggio.idvviaggio
    ,vviaggio.anno
    ,vviaggio.data_competenza
    ,(select vordine.ritiroda from vordine where vordine.viaggio_num=vviaggio.idvviaggio order by vordine.ordine_viaggio asc LIMIT 1) ritiro
    ,(select vordine.consegnaa from vordine where vordine.viaggio_num=vviaggio.idvviaggio order by vordine.ordine_viaggio desc LIMIT 1) consegna
    from vviaggio
    si, scusa, quella era la sintassi di Firebird ma in modo simile hai risolto in MYSQL

  6. #6
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Quote Originariamente inviata da 123delphi321 Visualizza il messaggio
    io, per iniziare, proverei una cosa del genere....ma aspetta sempre optime!

    codice:
    select
    viaggio.viaggio_id
    ,viaggio.viaggio_anno
    ,viaggio.viaggio_data
    ,(select first 1 ordine.ritiro   from ordine where ordine.id_viaggio=viaggio.viaggio_id order by ordine.sequenza asc) ritiro
    ,(select first 1 ordine.consegna from ordine where ordine.id_viaggio=viaggio.viaggio_id order by ordine.sequenza desc) consegna
    from viaggio
    Ciao,
    puoi fare così:

    codice:
    select
    viaggio.viaggio_id,
    viaggio.viaggio_anno,
    viaggio.viaggio_data,
    (select ordine.ritiro
    from ordine 
    where ordine.id_viaggio = viaggio.viaggio_id 
    and not exists (
    	select 1
    	from ordine o2
    	where o2.id_viaggio = ordine.id_viaggio
    	and o2.sequenza < ordine.sequenza)
    ) ritiro,
    (select ordine.consegna
    from ordine 
    where ordine.id_viaggio = viaggio.viaggio_id 
    and not exists (
    	select 1
    	from ordine o2
    	where o2.id_viaggio = ordine.id_viaggio
    	and o2.sequenza > ordine.sequenza)
    ) consegna
    from viaggio

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    1,326
    Quote Originariamente inviata da Joe Taras Visualizza il messaggio
    Ciao,
    puoi fare così:

    codice:
    select
    viaggio.viaggio_id,
    viaggio.viaggio_anno,
    viaggio.viaggio_data,
    (select ordine.ritiro
    from ordine 
    where ordine.id_viaggio = viaggio.viaggio_id 
    and not exists (
        select 1
        from ordine o2
        where o2.id_viaggio = ordine.id_viaggio
        and o2.sequenza < ordine.sequenza)
    ) ritiro,
    (select ordine.consegna
    from ordine 
    where ordine.id_viaggio = viaggio.viaggio_id 
    and not exists (
        select 1
        from ordine o2
        where o2.id_viaggio = ordine.id_viaggio
        and o2.sequenza > ordine.sequenza)
    ) consegna
    from viaggio
    perdonami Joe Taras, ma io avrei dei dubbi su quanto da te postato.
    se non inserisci l'ordine Ascendente/Discendente potresti non prendere il primo valore ritiro/consegna!

  8. #8
    Utente di HTML.it L'avatar di Joe Taras
    Registrato dal
    Nov 2003
    residenza
    Taranto
    Messaggi
    955
    Quote Originariamente inviata da 123delphi321 Visualizza il messaggio
    perdonami Joe Taras, ma io avrei dei dubbi su quanto da te postato.
    se non inserisci l'ordine Ascendente/Discendente potresti non prendere il primo valore ritiro/consegna!
    Ciao!
    I dubbi sono sempre leciti, ma se vedi bene la query c'è una subquery di NOT EXISTS che in pratica ti dice che non ci sono righe che precedono o che seguono (a seconda delle due condizioni che ti ho messo), che equivale a fare l'ordinamento e prendere il primo elemento, col vantaggio però di essere più veloce

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.