如何解决MySQL中的这种“游标”类型查询?

时间:2012-10-01 09:53:59

标签: mysql

我的表中有以下数据。 BTW ......这是DD / MM / YYYY格式:

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)。如果有一个日期,那么从列表中删除它,因为它需要相隔1天。然后转到13/09/2012,然后检查12/09/2012并没有找到,然后转到下一个等等。基本上你不能让日期相互靠近(相隔最少1天)。

现在我可以在光标上执行此操作,如果它在TSQL上,但是因为我正在使用MySQL,MySQL中有没有这样的东西?或者也许任何可以解决此查询的子查询方法?

感谢您的反馈。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

只要我知道mysql查询将会退出棘手和错误,如果你有一些如何设法写一个。我建议去光标,这里是光标的语法, here is the syntax of the cursor

答案 2 :(得分: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 ......),然后WHERE条件过滤记录。尝试运行子查询以了解它是如何工作的 -

  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