Option 1: Utilisation de MS SQL Server 2008
commande avec l'horodatage, on peut utiliser la fonction rank()
et une table temporaire. Une variable CTE et une variable de table peuvent également être utilisées. La performance est une partie difficile, donc je suggère de tester les trois options si cela va se répéter à l'avenir.Je vais vous montrer deux exemples:
TABLE TEMPORAIRE (try it in SQLFiddle):
select rank() OVER (ORDER BY order_timestamp) as 'Rank', status into temp1 from temp
select t1.status as status, case when t1.status - t2.status = 0 then 'not changed' else 'changed' end as changed
from temp1 t1, temp1 t2
where t1.Rank = t2.Rank + 1
drop table temp1
CTE (try it in SQLFiddle):
with CTE_temp as (
select rank() OVER (ORDER BY order_timestamp) as 'Rank', *
from temp
)
select t1.status as status, case when t1.status - t2.status = 0 then 'not changed' else 'changed' end as changed
from CTE_temp t1, CTE_temp t2
where t1.Rank = t2.Rank + 1
Option 2: Utilisation MS SQL SERVER 2012
MS SQL SERVER 2012 a présenté lead
et lag
(http://blog.sqlauthority.com/2011/11/15/sql-server-introduction-to-lead-and-lag-analytic-functions-introduced-in-sql-server-2012/).
Dans ce cas, l'option # 1 est toujours valide, mais vous pouvez également essayer la solution @ RomanPekar.
MISE À JOUR:
Basé sur @ commentaire de RomanPekar (et la downvote de quelqu'un), je dois dire qu'une table temporaire peut parfaitement faire mieux qu'un CTE et une variable de table, surtout quand un grand ensemble de données devrait. L'optimiseur peut utiliser les statistiques de la table temporaire pour établir son plan de requête, ce qui peut entraîner des gains de performances. De même, en fonction de l'utilisation que l'OP veut donner aux données après (peut-être plus de requêtes), la table temporaire est toujours là, aucune nouvelle requête ne doit être exécutée et les index peuvent être utilisés pour améliorer les performances . BTW, hacking ma réponse et la convertir en une variable CTE ou une table est facile, donc je suggère l'OP pour tester la performance pour les trois cas si c'est une opération qu'il va répéter dans le futur.
d'autres colonnes de votre tableau? –
Oui beaucoup, j'ai oublié de le dire désolé. –
alors quelles sont les autres colonnes? Y a-t-il un identifiant unique? Comment savez-vous quand un changement s'est produit (c'est-à-dire comment les données sont-elles commandées)? Nous avons besoin de beaucoup plus d'infos? –