Groupe SQL Server 2005 par avec la même colonne mais la date et l'heure différentes?

tout le monde … actuellement j'ai une table comme ci-dessous ..

DATE BATCHNO PRODCODE ---------------------------------------------- 31/12/2009 23.53 10859 2003P 01/01/2010 00.04 10860 2003P 01/01/2010 00.06 10861 2003P 01/01/2010 00.13 10862 2003P 01/01/2010 00.30 10863 1259 01/01/2010 03.02 10864 639B 01/01/2010 03.13 10865 639B 01/01/2010 03.20 10866 639B 01/01/2010 04.13 10867 2003P 01/01/2010 04.20 10868 2003P 01/01/2010 04.30 10863 2003P 

ci-dessus est l'exemple de la table que j'ai maintenant .. le DATE est généré chaque fois qu'il y a de nouveaux BATCHNO et le BATCHNO est augmenté de 1 .. le PRODCODE est le code du produit où la machine fabrique le produit et disons le produit 2003P fini , il ira automatiquement pour un autre produit tel que 1259 …

Je voudrais calculer ces données dans le résultat ci-dessous souhaité:

 DATE PRODCODE ---------------------------------------------- 31/12/2009 23.53 2003P 01/01/2010 00.13 2003P 01/01/2010 00.30 1259 01/01/2010 00.30 1259 01/01/2010 03.02 639B 01/01/2010 03.20 639B 01/01/2010 04.13 2003P 01/01/2010 04.30 2003P 

ce qui signifie que 31/12/2009 23.53 est l'heure de début pour le produit 2003P et 01/01/2012 00.13 est l'heure d'arrêt pour le produit 2003P .. et pour le produit 1259 est spécial parce que 01/01/2010 00.30 produire seulement 1 produit avant passer à un autre produit .. fondamentalement, je ne peux pas utiliser le groupe par parce qu'il va regrouper par tout le produit qui sont le même code .. le problème est que détecter l'heure de début et arrêter le time pour le code produit particulier. . Comment cela peut-il être accompli? et c'est pour SQL Server 2005 …

Merci tout le monde ..

     select U.[DATE], U.PRODCODE from ( select min(T.[DATE]) as StartDate, max(T.[DATE]) as EndDate, T.PRODCODE from ( select [DATE], PRODCODE, row_number() over(order by [DATE]) as rn1, row_number() over(order by PRODCODE, [DATE]) as rn2 from YourTable ) T group by T.PRODCODE, T.rn2-T.rn1 ) T unpivot ( [DATE] for D in (StartDate, EndDate) ) U order by U.[DATE] 

    SE-Données

    Idée: ajoutez une colonne pour get l'identifiant de l'heure de début de la pièce DIFFERENTE suivante et supprimez et interrogez pour la remplir. Ensuite, créez une autre colonne, mais cette fois-ci, sauvegardez l'heure de fin de la pièce DIFFERENTE précédente. Le code pour une telle tâche serait une sous-requête

     update table set prev=(select top 1 batchno from table x where x.prodcode!=table.prodcode and x.date<table.date order by x.date DESC)+1, next=(select top 1 batchno from table x where x.prodcode!=table.prodcode and x.date>table.date order by x.date ASC)-1 

    De cette façon, vous auriez les limites pour chaque produit. A partir de maintenant vous venez juste

     select prodcode, prev, next from table group by prodcode, prev, next 

    et enfin joindre les dates de la table sur la dernière requête sur prev=prodcode et next=prodcode .

    Bonne chance 🙂