2014-12-28 68 views
0

我試圖找到一種從上一行中檢索值的方法。我想要做的是首先按日期1排序行(最早的第一個)。然後,如果日期2晚於該列中的所有之前的日期,我想要取出該行(加上第一個初始行)。我的服務器不支持LAG功能。我已經嘗試過使用CTE的建議,但我的服務器似乎也沒有認識到這一點。在MySQL中的上一行值

我想要做的是檢查按日期1排序後,如果第2行的日期2>第1行的日期2,並且如果是,則返回該行。

下面是一個示例表。正如你所看到的,ID是不相同的順序日期1. ID Date 1 Date 2 1 2000-01-01 2010-01-01 2 2001-08-01 2013-06-01 3 2000-06-01 2011-01-01 4 1999-07-01 2010-12-01 5 2002-02-01 2012-12-01

所以在我的例子,我想退還這3個記錄: ID Date_1 Date_2 Previous_max 4 1999-07-01 2010-12-01 NULL 3 2000-06-01 2011-01-01 2010-12-01 2 2001-08-01 2013-06-01 2011-01-01

ID 1,並且不退還5因爲日期1晚,日期2早於另一行(分別爲4和2)。

+0

SQL Server和Oracle的支持LAG關鍵字,它讓一切變得簡單和良好的執行。在MySql中你需要的破解不是那麼重要。 –

回答

2

你應該能夠與相關子查詢做到這一點:

select t.*, 
     (select max(date_2) from table t2 where t2.date_1 < t.date_1) as prev_max 
    from table t 
    having prev_max is null or prev_max < date_2; 
+0

感謝您的幫助。我相當新的SQL,我不明白使用「表t2」?我只有一個表中的數據(在這種情況下,它將是表t)。試圖運行代碼時出現#1064錯誤。 – Andy

+0

't2'是一個表別名。這是一種將子查詢中的表引用與外部查詢中的引用區分開來的方法。這是需要表別名的情況。 –