Ho un database mysql con una tabella che ha questi tre campi:
timestamp
name
values
la chiave primaria è timestamp,name
cioè per ogni timestamp ci possono essere più valori ognuno con nome diverso.
Visto che il numero di nomi è limitato io vorrei costruire, a partire da quella, una del tipo
timestamp,nome1,nome2,value
per esempio
timestamp;name;values
1234;X;10
1234;Y;11
1235;X;12
1235;Y;13
1236;X;14
1236;Y;15
diventerebbe
timestamp;X;Y
1234;10;11
1235;12;13
1236;14;15
Questo in tempo reale, cioè a "query time" perchè la tabella originale è popolata in continuazione ogni 5 minuti.
Pensavo di fare questo a livello di query invece che dal programma.
E' possibile?
Inoltre (applicato sempre sulle stessa tabella, ma sono due problemi diversi) dal momento che questa tabella può arrivare ad avere molte righe, tale tabella è suddivisa in più tabelle con gli stessi campi e del tutto uguali, ma ognuna mantiene solo qualche ora di dati, poi ne viene fatta un'altra. La media è di 2 milioni di righe l'una (c.a. 60MB)
Quando devo prelevare i dati da un arco temporale che scavalca quell'orario devo fare la query su più tabelle e poi unire i dati.
E' possibile anche quì far fare una unica query in cui gli dico di prendere i dati da una concatenazione di più tabelle?
Ho visto la direttiva 'UNION' che sembra fare al caso mio, ma mi chiedo se conviene fare
select * from tabella1 where condizione
union
select * from tabella2 where condizione
o, visto che la condizione è la stessa,
select * from tabella1
union
select * from tabella2
e dare questa in pasto ad una where (ma non so come si fa).
notare che a volte aggiungo anche formule invece di * e/o funzioni di aggregazione con group by. Per le prime posso operare su singola tabella e dopo fare la union, per la group by talvolta devo farlo su range che potrebbero abbracciare le due tabelle, tipo sum(value)...group by name o qualcosa di simile, da applicare sull'intero dataset.
Non escludo poi il mischiare le due problematiche (compattare le tabelle come spiegato al primo punto e combinarle come al secondo o viceversa).
a tutto potrebbe unirsi qualche inner join con altre tabelle.
Sto pretendendo troppo?
p.s.: preferisco un accesso readonly al db, quindi escluderei la creazione di store procedure ecc..., visto che il database è popolato da software di terze parti.
