J'ai une table ressemblant à ceci: Je veux convertir cette table en cette base sur valeur (valeur = 1 ==> Starttime, valeur = 0 ==> . p> J'ai essayé d'utiliser un cas lors de la sélection de l'instruction SELECT, mais renvoyez NULL sur chaque colonne comme celle-ci p>
3 Réponses :
Depuis que vous n'avez pas de colonne de regroupement ici, nous devons faire une hypothèse: nous pouvons traiter vos données en supposant que si nous commandons à la date, les 1 et 0 alternaient. Sinon, il n'y a pas de solution, car nous ne savons pas comment corréler les 1 avec les 0 avec les 0.
Étant donné que nous pouvons assumer cette commande, nous pouvons utiliser lag () code> ou
. () code> pour faire cela. Notez que cela suppose que vous commenciez avec 1, et chaque 1 a un correspondant 0. Si le dernier 1 n'a pas de 0 correspondant 0, puis de fin de temps sera null pour cette ligne. P>
select u.TagName,
u.StartTime,
u.EndTime
from (
select TagName,
StartTime = [DateTime] ,
EndTime = lead([DateTime], 1) over
(
partition by TagName
order by [Datetime] asc
),
value
from t
) u
where u.value = 1
Vous devez partitionner par tagname code>.
Vrai, je ne devrais pas supposer un seul tagname.
Il existe de multiples façons de l'approcher. Si je suppose que les valeurs sont parfaitement entrelacées, une méthode est une agrégation:
Juste parce que je n'ai pas vu le Exemple fort> p> Somme () sur Code> Option
TagName StartTime EndTime
HA_06_ON 2020-07-07 08:52:14.000 2020-07-07 09:01:42.000
HA_06_ON 2020-07-07 09:02:17.000 2020-07-07 09:32:55.000
HA_06_ON 2020-07-07 09:33:21.000 2020-07-07 09:35:02.000
HA_06_ON 2020-07-07 09:35:27.000 2020-07-07 09:35:44.000
HA_06_ON 2020-07-07 10:10:32.000 2020-07-07 10:10:40.000
Cela ne convient pas à une colonne en deux, il s'agit d'un problème d'espace-et d'îles - vous essayez de trouver les valeurs de début / de fin de l'île spécifiées par code> code>.
Les lacunes et les îles Code> est le nom réel de cette catégorie de problèmes. Vous pouvez utiliser Google pour trouver des solutions. Dans ce cas,
somme (valeur) sur (partition par TAGName Commande par DateTime) CODE> vous donnera un île que vous pouvez utiliser pour le regroupement et l'extraction du
min (datetime) code> et < Code> Max (DateTime) Code> Valeur.
Somme sur Code> renvoie un total exécuté de la valeur code>. Compte tenu de la valeur code> de code> ... Les valeurs qui finissent par devenir une incrémentation
Island code> ID
Vous ne pouvez pas regrouper une colonne calculée cependant, de sorte que tout cela devrait être enveloppé dans un CTE, par exemple
avec des îles comme (SELECT ... SUM () ... AS ILLIMEID ..) Sélectionnez TagName, Min ( DateTimeOffset), max (DateTime) du groupe Îles par TagName, Islandid Code>
Avec la commande toujours 1 -> 0 -> 1 -> 0 -> ...? Pourriez-vous avoir 1 -> 0 -> 0 -> 1? Que se passe-t-il alors?
Voici un bon endroit à lire sur les lacunes et les îles < / a>
@Panagiotiskanavos merci beaucoup pour votre aide !!! J'ai la recherche sur les lacunes et les îles et être capable de résoudre mon problème !!!