2013-12-23 64 views
0

选择行我有一个问题,很多像这样的在价格变化

SQL: selecting rows where column value changed from previous row

虽然没有在SQL Server的MySQL。我试过ypercube的第一个答案jiri的答案和egor的。他们都跑了超过5分钟,没有结果(我跑了10分钟)。该表包含超过一百万条记录,所以我知道这是问题的重要组成部分。我有一种感觉ypercube的第二个答案可能效果不错,但不知道如何将这个变量驱动的mysql查询更改为SQL。

任何帮助,将不胜感激。

版本的SQL 2008 R2

基本上我需要确定何时价格表上包含改变价格,的productID,SERIALNUMBER和时间戳。

我能得到的进行检查productids /序列号需要什么来比较快速列表。对不起,我没有包括这个早些时候我想我可以适应一个解决方案,以适应它。

+0

耻辱。 2012年的“LAG”/“LEAD”比2008年的选择更有效率。你的表结构是什么? –

+0

我可以快速列出需要查询的产品并将其放入临时表中,但是我仍然需要通过整个表格来检查这些产品的更改,以免造成太大的帮助。 – RustyH

+3

如果我们能够为您提供帮助,您将不得不发布一些数据库结构。 – Zane

回答

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