选择价格变化的行

时间:2013-12-23 18:01:24

标签: sql sql-server sql-server-2008-r2

我有一个像这样的问题

SQL: selecting rows where column value changed from previous row

虽然不在SQL Server的mysql中。我尝试了ypercube的第一个回答jiri的答案和egor's。所有这些都只运行超过5分钟而没有结果(一个让我跑超过10分钟)。该表包含超过一百万条记录,所以我知道这是问题的一个重要部分。我有一种感觉ypercube的第二个答案可能会运作良好,但不知道如何将这个变量驱动的mysql查询更改为SQL。

任何帮助将不胜感激。

SQL版本2008 r2

基本上我需要确定价格在包含价格,productID,序列号和日期戳的表格上的变化。

我可以快速列出需要检查哪些产品/序列号以进行比较。对不起,我之前没有提到这个,我以为我可以调整一个解决方案来适应它。

1 个答案:

答案 0 :(得分:0)

公用表表达式应​​该相当有效;

WITH cte AS (
  SELECT *, ROW_NUMBER() OVER (PARTITION BY system ORDER BY timestamp) rn
  FROM TableX
)
SELECT a.timestamp, a.system, a.statusa, a.statusb
FROM cte a JOIN cte b ON a.system = b.system AND a.rn = b.rn+1
WHERE a.statusa <> b.statusa

An SQLfiddle to test with