Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135

    Query complessa su MySQL

    Ciao a tutti.

    Potreste aiutarmi a risolvere questo problema?

    Questa è una tabella in DB MySQL:

    codice:
    ID	HOUR	DATE		NAME
    1	11:30	2009-01-21	PETER
    2	11:48	2009-01-21	PETER
    3	11:55	2009-01-21	DANA
    4	12:09	2009-01-21	PETER
    5	14:00	2009-01-21	PETER
    6	14:33	2009-01-21	DANA
    Avrei necessità di questo output:

    codice:
    1	11:30	2009-01-21	PETER
    3	11:55	2009-01-21	DANA
    5	14:00	2009-01-21	PETER
    6	14:33	2009-01-21	DANA
    Cioè prelevare per ogni singolo NAME il record più vecchio x la data di oggi e poi prendere soltanto quelli che sono superiori di un'ora rispetto al record più vecchio.

    Ad esempio:

    11:30 2009-01-21 PETER >>>>>> Lo prendo perchè è il più vecchio con NAME PETER per la data di oggi

    11:55 2009-01-21 DANA >>>>>> Lo prendo perchè è il più vecchio con NAME DANA per la data di oggi

    11:48 2009-01-21 PETER >>>>>> Lo scarto perchè rispetto al record più vecchio con la stessa data è ancora all'interno di un'ora ( 11:30 )

    12:09 2009-01-21 PETER >>>>>> Lo scarto perchè rispetto al record più vecchio con la stessa data è ancora all'interno di un'ora ( 11:30 )

    14:00 2009-01-21 PETER >>>>> Lo prendo perchè ha la stessa data di oggi ma è oltre un'ora rispetto al record più vecchio

    14:33 2009-01-21 DANA >>>>> Lo prendo perchè ha la stessa data di oggi ma è oltre un'ora rispetto al record più vecchio


    Potreste aiutarmi?

    Grazie
    Lo Stato dà un posto. L’impresa privata dà un lavoro. – Indro Montanelli

  2. #2
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135
    up
    Lo Stato dà un posto. L’impresa privata dà un lavoro. – Indro Montanelli

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152
    prova con GROUP BY:

    GROUP BY HOUR(hour)



  4. #4
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135
    Originariamente inviato da Eas
    prova con GROUP BY:

    GROUP BY HOUR(hour)


    Grazie ma con il tuo suggerimento:

    codice:
    SQL = "SELECT * FROM TBL GROUP BY HOUR(HOUR)"
    Ottengo questi records:

    codice:
    ID	HOUR	DATE		NAME
    1	11:30	2009-01-21	PETER
    4	12:09	2009-01-21	PETER
    5	14:00	2009-01-21	PETER
    Non estrae questi records:

    codice:
    1	11:30	2009-01-21	PETER
    3	11:55	2009-01-21	DANA
    5	14:00	2009-01-21	PETER
    6	14:33	2009-01-21	DANA
    Lo Stato dà un posto. L’impresa privata dà un lavoro. – Indro Montanelli

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    152
    SQL = "SELECT * FROM TBL GROUP BY HOUR(HOUR), DATE, NAME"

  6. #6
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135
    Grazie.

    Questo è il risultato della tua query :


    codice:
    ID	HOUR	DATE		NAME
    1	11:30	2009-01-21	PETER
    3	11:55	2009-01-21	DANA
    4	12:09	2009-01-21	PETER
    5	14:00	2009-01-21	PETER
    6	14:33	2009-01-21	DANA
    Il record con ID 4 è di troppo perchè non è ancora passata un'ora dall'ultimo accesso di PETER quello delle 11:30
    Lo Stato dà un posto. L’impresa privata dà un lavoro. – Indro Montanelli

  7. #7
    Utente di HTML.it L'avatar di [trodat]
    Registrato dal
    Oct 2004
    Messaggi
    2,135
    Risolto, anche con l'aiuto di questa discussione: http://forum.html.it/forum/showthrea...a&pagenumber=2

    codice:
    <%@ Language=VBScript %> 
    <% response.buffer=true %>
    <% Server.ScriptTimeout = 300 %>
    
    <%
    
    Set conn = Server.CreateObject("ADODB.Connection")
    conn.Open "DRIVER={MySQL ODBC 3.51 Driver};SERVER=localhost;DATABASE=test;USER=root;PASSWORD=1234567;OPTION=3;"
    
    strSQLNomi = "SELECT Name FROM TBL GROUP BY Name"
    Set rsNomi = Server.CreateObject("ADODB.RecordSet")
    rsNomi.open strSQLNomi, conn
    
    Do While Not rsNomi.EOF
    
      strSQL = " SELECT *, " 
      strSQL = strSQL & " CAST(`DATE` AS DATETIME) + " 
      strSQL = strSQL & " INTERVAL TIME_TO_SEC(CAST(`HOUR` AS TIME)) SECOND " 
      strSQL = strSQL & " AS DATA_ORA "                   
      strSQL = strSQL & " FROM " 
      strSQL = strSQL & " TBL " 
      strSQL = strSQL & " WHERE "
      strSQL = strSQL & " NAME = '" & rsNomi("NAME") & "' "
      strSQL = strSQL & " ORDER BY ID ASC "
    
      Set rs = Server.CreateObject("ADODB.RecordSet")
      rs.open strSQL, conn
    
      If not rs.EOF then 
        dataOra = rs("data_ora")
        
         RESPONSE.WRITE RS("ID") & " >>> " &_
                        RS("DATE") & " >>> " &_
                        RS("HOUR") & " >>> " &_
                        RS("NAME") & "
    " 
    
        rs.movenext   
      End If
    
      Do While Not rs.EOF
    
        If rs("data_ora") > DateAdd("h",1,dataOra) then  
        
          dataOra = rs("data_ora")
          
          RESPONSE.WRITE RS("ID") & " >>> " &_
                         RS("DATE") & " >>> " &_
                         RS("HOUR") & " >>> " &_
                         RS("NAME") & "
    " 
        End If
    
        rs.movenext
      Loop
    
      rsNomi.MoveNext
    Loop
    
    rsNomi.Close()
    Set rsNomi = Nothing
    
    rs.Close()
    Set rs = Nothing
    
    Conn.Close()
    Set Conn = Nothing
    
    %>
    Questo è il risultato:

    3 >>> 21/01/2009 >>> 11:55 >>> DANA
    6 >>> 21/01/2009 >>> 14:33 >>> DANA
    1 >>> 21/01/2009 >>> 11:30 >>> PETER
    5 >>> 21/01/2009 >>> 14:00 >>> PETER
    Lo Stato dà un posto. L’impresa privata dà un lavoro. – Indro Montanelli

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 © 2026 vBulletin Solutions, Inc. All rights reserved.