2016-08-09 1 views
0

J'ai besoin de toutes les valeurs X pour les identifiants sélectionnés et j'unis l'horodatage s'il est égal. Je veux accéder à cette table avec php et obtenir le résultat.Comment interroger UNION sur la même table et créer de nouvelles colonnes mysql?

Est-ce encore possible?

Je veux SELECT id = 1, id = 2, id = 3, id = 5 Du groupe de données par horodatage? Il y a beaucoup d'identifiants, mais j'ai besoin d'une requête où je peux choisir les identifiants et obtenir un résultat où l'horodatage égal de plusieurs valeurs x de différents identifiants est combiné.

Table'data'   
+--+-------+--------+---+--+---------+------+ 
|id| timestamp | Name | X | Y | other| 
+--+-------+--------+---+--+---------+------+ 
| 1|1.01.14 19:59:21| Müller | 3 | 1 |  1|  
| 2|1.01.14 19:59:21| Schmidt| 5 | 2 |  2|     
| 3|1.01.16 20:59:22| Taler | 6 | 3 |  1|  
| 5|1.01.14 19:59:21| Paul | 10| 2 |  3| 
+--+-------+--------+---+--+---------+------+ 

Besoin de sortie:

Table'data'   
+----------------+------+------+------+------+-- -+ ---+----+----+ 
| timestamp  | id | id | id | id | X | X | X | X | 
+----------------+------+------+------+------+-- -+ ---+--- +----+ 
|1.01.14 19:59:21| 1 | 2 | null | 5 | 3 | 5 |null| 10 | 
|1.01.16 20:59:22| null| null| 3 | null|null|null| 6 |null|  
+----------------+------+------+------+------+----+----+----+----+ 

OR: 

Table'data' Output: 
+----------------+------+------+------+------+ 
| timestamp  | id | id | id | id | 
+----------------+------+------+------+------+ 
|1.01.14 19:59:21| 3 | 5 |null | 10 | 
|1.01.16 20:59:22|null |null | 6 | null |  
+----------------+------+------+------+------+ 

Répondre

1

En supposant que vous connaissez les id valeurs, vous pouvez utiliser conditional aggregation pour pivot vos résultats:

select timestamp, 
    max(case when id = 1 then id end) id1, 
    max(case when id = 2 then id end) id2, 
    max(case when id = 3 then id end) id3, 
    max(case when id = 5 then id end) id5, 
    max(case when id = 1 then x end) x1, 
    max(case when id = 2 then x end) x2, 
    max(case when id = 3 then x end) x3, 
    max(case when id = 5 then x end) x5 
from yourtable 
group by timestamp 

Je suppose que pour 1.01.16 20:59:22 la valeur de 6 devrait être dans le 3ème x, pas le 4ème.