none
Ordinare per gruppi RRS feed

  • Domanda

  • Ciao a tutti
    Spero di essere chiaro.

    Ho una tabella dove registro tutte le mail inviate per una data prenotazione:
    Codice | Data | Oggetto

    Se ho per esempio
    1 23/02/17 A
    2 23/02/17 AA
    3 21/02/17 A4
    1 21/02/17 A15
    1 20/02/17 A6
    2 19/02/17 A

    Vorrei ordinare per data in questo modo:
    1 23/02/17 A
    1 21/02/17 A15
    1 20/02/17 A6
    2 23/02/17 AA
    2 19/02/17 A
    3 21/02/17 A4
    dove il record più recente e seguito da tutti i record con lo stesso codice

    Grazie mille

    venerdì 31 marzo 2017 16:23

Risposte

  • Ciao SviPla,

    ok, con questo esempio è chiaro cosa vuoi ottenere, perdona ma prima non lo era :-)

    puoi fare così:

    CREATE TABLE #test
    (Codice int,Data datetime,Oggetto Varchar(20))
    
    insert into #test values 
           (1,'20170125','A')
          ,(2,'20170122','AA')
          ,(3,'20170127','A2')
          ,(1,'20170118','A45')
          ,(3,'20170116','A43');
    
    with md AS
    (select Codice,MAX(Data) AS MaxData
     from   #test
     group By Codice
     )
    select t.Codice,t.Data,t.Oggetto
      from  #test AS t
        inner join Md on t.Codice = Md.Codice
    order by Md.MaxData desc,t.Codice,Data DESC
    
    -- pulizia
    drop table #test
    
    /**
     3 22/01/2017 A2
     3 16/01/2017 A43
     1 25/01/2017 A
     1 18/01/2017 A45
     2 22/01/2017 AA
     */

    Ciao
    Giorgio Rancati

    venerdì 7 aprile 2017 08:37
    Moderatore

Tutte le risposte

  • Ciao,

    non mi è chiarissimo il criterio di ordinamento che desideri applicare, comunque, in base al risultato che vedo e tralasciando la colonna Oggetto, ordinerei semplicemente in questo modo:

    ORDER BY Codice ASC, Data DESC


    HTH,

    Cris

    Please Mark This As Answer if it solved your issue or Vote This As Helpful if it helps to solve your issue. Thank you!

    sabato 1 aprile 2017 07:43
  • Ciao

    Devo raggruppare per codice, ogni blocco ordinato per data decrescente e visualizzare questi blocchi in base alla data del primo elemento di ogni blocco.

    1 23/02/17 A
    1 21/02/17 A15
    1 20/02/17 A6

    2 23/02/17 AA
    2 19/02/17 A

    3 21/02/17 A4

    lunedì 3 aprile 2017 10:40
  • Ciao Svipla

    è esattamente il risultato che rende il suggerimento di Cristiano

    CREATE TABLE #test
    (Codice int,Data datetime,Oggetto Varchar(20))
    
    insert into #test values 
           (1,'20170223','A')
          ,(2,'20170223','AA')
          ,(3,'20170221','A4')
          ,(1,'20170221','A15')
          ,(1,'20170220','A6')
          ,(2,'20170219','A')
    
    select Codice,Data,Oggetto
      from  #test
    order by Codice,Data DESC
    
    drop table #test
    
    /******** Risultato
    
    Codice      Data           Oggetto
    ----------- -------------- --------------------
    1           23/02/2017     A
    1           21/02/2017     A15
    1           20/02/2017     A6
    2           23/02/2017     AA
    2           19/02/2017     A
    3           21/02/2017     A4
    
    */

    sinceramente non ho capito perché hai tolto la spunta di risposta messa da Edoardo e che risultato tu voglia ottenere.

    Ciao
    Giorgio Rancati

    giovedì 6 aprile 2017 18:14
    Moderatore
  • Ciao Giorgio

    Non va bene perchè ordina prima per codice. Se ho:

    1 25/01/2017 A
    2 22/01/2017 AA
    3 27/01/2017 A2
    1 18/01/2017 A45
    3 16/01/2017 A43

    Avrò
    1 25/01/2017 A
    1 18/01/2017 A45
    2 22/01/2017 AA
    3 27/01/2017 A2
    3 16/01/2017 A43

    Invece io voglio
    3 27/01/2017 A2
    3 16/01/2017 A43
    1 25/01/2017 A
    1 18/01/2017 A45
    2 22/01/2017 AA

    venerdì 7 aprile 2017 07:10
  • hai provato con

    ORDER BY Data DESC, Codice ASC


    Edoardo Benussi
    Microsoft MVP - Cloud and Datacenter Management
    edo[at]mvps[dot]org

    venerdì 7 aprile 2017 07:15
    Moderatore
  • Ciao SviPla,

    ok, con questo esempio è chiaro cosa vuoi ottenere, perdona ma prima non lo era :-)

    puoi fare così:

    CREATE TABLE #test
    (Codice int,Data datetime,Oggetto Varchar(20))
    
    insert into #test values 
           (1,'20170125','A')
          ,(2,'20170122','AA')
          ,(3,'20170127','A2')
          ,(1,'20170118','A45')
          ,(3,'20170116','A43');
    
    with md AS
    (select Codice,MAX(Data) AS MaxData
     from   #test
     group By Codice
     )
    select t.Codice,t.Data,t.Oggetto
      from  #test AS t
        inner join Md on t.Codice = Md.Codice
    order by Md.MaxData desc,t.Codice,Data DESC
    
    -- pulizia
    drop table #test
    
    /**
     3 22/01/2017 A2
     3 16/01/2017 A43
     1 25/01/2017 A
     1 18/01/2017 A45
     2 22/01/2017 AA
     */

    Ciao
    Giorgio Rancati

    venerdì 7 aprile 2017 08:37
    Moderatore
  • Grazie Giorgio

    Provo e vi faccio sapere

    Ancora grazie

    venerdì 7 aprile 2017 08:39