我的表中有以下数据。 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中有没有这样的东西?或者也许任何可以解决此查询的子查询方法?
感谢您的反馈。
答案 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