Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    selezionare le righe come colonne

    Salve, partendo da una tabella come questa:

    Codice PHP:
    CREATE TABLE IF NOT EXISTS `OPT_FTSEMIB` (
      `
    IDint(11NOT NULL AUTO_INCREMENT,
      `
    SDATEdate NOT NULL,
      `
    SPOTfloat NOT NULL,
      `
    EXPIRYchar(5NOT NULL,
      `
    TYPEchar(1NOT NULL,
      `
    STRIKEint(11NOT NULL,
      `
    SETTLEMENTint(11NOT NULL,
      
    PRIMARY KEY (`ID`)
    ); 
    Ogni giorno viene aggiunto un record, quindi abbiamo ogni giorno un valore per SDATE diverso, dove viene aggiornato il valore di SPOT ed il valore di SETTLEMENT riferito a STRIKE.

    Quindi, oggi per STRIKE=10000 & TYPE="C" & EXPIRY="DEC15" avremo SETTLEMENT=12345 e per STRIKE=11000 avremo SETTLEMENT=54321 etc...

    domani magari per STRIKE=10000 & TYPE="C" & EXPIRY="DEC15" avremo SETTLEMENT=23456 e per STRIKE=11000 avremo SETTLEMENT=65432 etc...

    Infatti la query che faccio in lettura è spesso:
    Codice PHP:
    SELECT SDATESPOTSETTLEMENT
    FROM OPT_FTSEMIB
    WHERE STRIKE
    =10000 AND TYPE="C" AND EXPIRY="DEC15"
    così mi viene listato ogni giorno, il valore quotidiano dello SPOT ma soprattutto il valore di SETTLEMENT per quello STRIKE, per quel determinato tipo (TYPE) e scadenza (EXPIRY); in questo caso strike=10000 tipo=C e scadenza="DEC15" voglio sapere tutti i valori di SETTLEMENT che sono presenti in database, in ordine di inserimento (quindi order by date).

    Poi magari faccio:

    Codice PHP:
    SELECT SDATESPOTSETTLEMENT
    FROM OPT_FTSEMIB
    WHERE STRIKE
    =11000 AND TYPE="C" AND EXPIRY="DEC15"
    e ottengo lo stesso, per lo strike=11000

    Ora però vorrei fondere tutto in un unica query, in modo da ottenere in un unica SELECT i valori di SETTLEMENT per lo STRIKE=10000, STRIKE=11000 e altri ancora (in teoria fino a STRIKE=30000 a step di 500) per quella EXPIRY e TYPE.

    qualcosa che mi mosttri tipo nomi dei campi così e poi via via tutti i record:

    SDATE, SPOT, C10000,C11000,C12000
    ...,...,....,....,....
    ...,...,....,....,....
    ...,...,....,....,....
    etc...

    Secondo voi è possibile con una semplice SELECT oppure devo passare tutto in un array associativo (hash) multidimensionale in php e fare tutto da li?

    Grazie
    Codice PHP:
    $settlement->{"2012-08-20"}->{"DEC15"}->{"C"}->{"10000"} = 12345 

  2. #2
    molto dipende dal db. per questo il regolamento dice di indicarlo (già nel titolo!)

  3. #3
    Chiedo scusa, MySQL.

  4. #4
    Ho anche io la stessa domanda da porre, identica a quella di verhuizen.
    In pratica come tramutare il valore di una riga, nel nome di una colonna.

    A questo punto però faccio allo stesso autore una domanda relativa ad una soluzione posta da lui:
    come crei l'array associativo? Con una query per ogni step?
    Quindi una prima query per recuperare tutti gli step attivi e poi una perogni per recuperare i valori?

  5. #5
    dovrebbe essere una doppia query, che unisce i risultati.

    Nessuno di più esperto ha un consiglio?

  6. #6

    Re: selezionare le righe come colonne

    Originariamente inviato da verhuizen


    Ora però vorrei fondere tutto in un unica query, in modo da ottenere in un unica SELECT i valori di SETTLEMENT per lo STRIKE=10000, STRIKE=11000 e altri ancora (in teoria fino a STRIKE=30000 a step di 500) per quella EXPIRY e TYPE.

    qualcosa che mi mosttri tipo nomi dei campi così e poi via via tutti i record:

    SDATE, SPOT, C10000,C11000,C12000
    ...,...,....,....,....
    ...,...,....,....,....
    ...,...,....,....,....
    etc...

    Secondo voi è possibile con una semplice SELECT oppure devo passare tutto in un array associativo (hash) multidimensionale in php e fare tutto da li?

    questo è quanto sono riuscito a costruire...
    vedi se riesce a fare quello che chiedevi...

    codice:
    SELECT
    distinct sdate,
    spot,
    sum(c11000) As 'c11000',
    sum(c12000) As 'c12000',
    sum(c13000) As 'c13000',
    FROM (
      SELECT
        sdate,
        spot,
        IF(strike=11000,settlement,0) As 'c11000',
        IF(strike=12000,settlement,0) As 'c12000',
        IF(strike=13000,settlement,0) As 'c13000'
      FROM prova.opt_ftsemib o
    ) as b
    group by sdate;

  7. #7

    Re: Re: selezionare le righe come colonne

    Originariamente inviato da philbert
    questo è quanto sono riuscito a costruire...
    vedi se riesce a fare quello che chiedevi...

    codice:
    SELECT
    distinct sdate,
    spot,
    sum(c11000) As 'c11000',
    sum(c12000) As 'c12000',
    sum(c13000) As 'c13000',
    FROM (
      SELECT
        sdate,
        spot,
        IF(strike=11000,settlement,0) As 'c11000',
        IF(strike=12000,settlement,0) As 'c12000',
        IF(strike=13000,settlement,0) As 'c13000'
      FROM prova.opt_ftsemib o
    ) as b
    group by sdate;
    Ecco l'errore che mi restituisce:

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'FROM (
    SELECT
    sdate,
    spot,
    IF(strike=11000,settlement,0) As 'c' at line 7

  8. #8
    anziché

    ... As 'c11000'

    prova

    ... As `c11000`

    (e così tutti gli altri ... AS ... )


  9. #9
    sempre lo stesso errore, ti posso chiedere il perché di questa parte nella query?

    Codice PHP:
    FROM prova.opt_ftsemib o 

  10. #10
    Originariamente inviato da verhuizen
    sempre lo stesso errore, ti posso chiedere il perché di questa parte nella query?

    Codice PHP:
    FROM prova.opt_ftsemib o 
    prova è il node del db dove faccio le prove

    tu devi mettere solo

    codice:
     FROM opt_ftsemib o

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.