2012-10-01 59 views
1

我的表中有以下數據。順便說一句......這是一個DD/MM/YYYY格式:如何在MySQL中解決這個「遊標」類型的查詢?

Date 
18/09/2012 
17/09/2012 
13/09/2012 
11/09/2012 
10/09/2012 
09/09/2012 
25/08/2012 
24/08/2012 

是我想要的結果是:

Date 
18/09/2012 
13/09/2012 
11/09/2012 
09/09/2012 
25/08/2012 

規則: 它從最新的開始日期(18/09/2012),並檢查下一個(17/09/2012)。如果有日期,那麼將它從列表中刪除,因爲它需要相隔一天。然後去2012年9月13日,然後檢查2012年12月9日,沒有找到,然後移動到下一個如此等等。基本上你不能有約會對方(最少1天)。

現在我可以在光標上做到這一點,如果它在TSQL上,但是因爲我在MySQL上工作,MySQL中有沒有這樣的事情?或者也許可以解決這個查詢的任何子查詢方法?

我很感激您的反饋。

回答

1

嘗試這種解決方案 -

SELECT date FROM (
    SELECT 
    date, @d := IF(@d IS NULL OR DATEDIFF(@d, date) > 1, date, @d) start_date 
    FROM 
    dates, 
    (SELECT @d:=null) t 
    ORDER BY 
    date DESC 
) t 
WHERE start_date = date 

子查詢發現開始日(18,13,11 ...),又在哪裏條件過濾器記錄。嘗試運行子查詢以瞭解它是如何工作的 -

SELECT 
    date, @d := IF(@d IS NULL OR DATEDIFF(@d, date) > 1, date, @d) start_date 
    FROM 
    dates, 
    (SELECT @d:=null) t 
    ORDER BY 
    date DESC 
1
SELECT 
    "MyTable1"."Date" 
FROM 
    "MyTable" AS "MyTable1" 
    LEFT JOIN "MyTable" AS "MyTable2" ON 
     ADDDATE("MyTable1"."Date", INTERVAL 1 DAY) = "MyTable2"."Date" 
WHERE 
    "MyTable2"."Date" IS NULL 
ORDER BY 
    "MyTable1"."Date" DESC