Mon problème:
J'ai une table avec une Channel <int>
et une colonne Value <float>
, ainsi qu'un horodatage et deux autres colonnes avec des données supplémentaires. Channel
est soit 1
ou 2
, et il y a 1 ou 2 lignes qui ont tout sauf canal et valeur identique.déclaration Tricky SQL SELECT - combiner deux lignes dans deux colonnes
Ce que je voudrais faire est de sélectionner ces données dans un nouveau formulaire, où les deux canaux apparaissent en colonnes. J'ai essayé de faire quelque chose avec GROUP BY
, mais je ne pouvais pas comprendre comment obtenir les valeurs dans les colonnes correctes basées sur le canal sur la même rangée. , Ici il est
Pour ceux d'entre vous qui regardez plutôt les données que je l'ai et les données que je veux et la figure à partir de là:
Exemple. Ce que j'ai:
Channel Value Timestamp OtherStuff
1 0.2394 2010-07-09 13:00:00 'some other stuff'
2 1.2348 2010-07-09 13:00:00 'some other stuff'
1 24.2348 2010-07-09 12:58:00 'some other stuff'
2 16.3728 2010-07-09 12:58:00 'some other stuff'
1 12.284 2010-07-09 13:00:00 'unrelated things'
2 9.6147 2010-07-09 13:00:00 'unrelated things'
Ce que je veux:
Value1 Value2 Timestamp OtherStuff
0.2394 1.2348 2010-07-09 13:00:00 'some other stuff'
24.2348 16.3728 2010-07-09 12:58:00 'some other stuff'
12.284 9.6147 2010-07-09 13:00:00 'unrelated things'
Mise à jour en réponse à certaines questions qui ont arised dans les commentaires, et quelques questions de suivi/clarifications:
Oui, c'est la combinaison de
Timestamp
etOtherStuff
qui lie les deux lignes ensemble. (OtherStuff
est en fait plus d'une colonne, mais j'ai simplifié par souci de brièveté.) Il y a aussi quelques autres colonnes qui ne sont pas nécessairement égales, mais qui devraient être conservées telles quelles.Le tableau en question est déjà jointe à partir de deux tables, où
Value
,Channel
etTimestamp
vient d'un d'entre eux, et le reste (un total de 7 autres colonnes, dont 4 sont toujours égaux pour « liés » les rangées, et les trois autres ne le sont généralement pas). Il y a eu quelques suggestions en utilisantINNER JOIN
- cela fonctionnera-t-il encore si je suis déjà en train de joindre des choses ensemble (même si je n'ai pas demyTable
pour se rejoindre)?Il y a beaucoup de lignes avec le même horodatage, donc je besoin d'informations des deux tables, je me joins à comprendre les lignes à relier entre eux.
J'ai beaucoup de données. L'entrée provient d'appareils de mesure répartis dans tout le pays, et la plupart d'entre eux (sinon tous) téléchargent des mesures (jusqu'à 4 canaux) toutes les 2 minutes. À l'heure actuelle, nous avons environ 1000 appareils en ligne, ce qui signifie en moyenne environ 1000 lignes par minute. Je dois prendre en compte des valeurs qui sont au moins 3, de préférence 6, heures, ce qui signifie 180 000 à 360 000 lignes dans le tableau avec le canal, la valeur et l'horodatage.
ce qui relie les 2 lignes? horodatage et otherstuff? – gbn
Juste posé une question qui est inverse de ceci :)! – Baaju