1

テーブルに次のデータがあります。ところで...これは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

ルール: 最新の日付 (2012 年 9 月 18 日) から開始し、次の日付 (2012 年 9 月 17 日) をチェックします。日付がある場合は、1 日離れている必要があるため、リストから削除します。次に、2012 年 9 月 13 日に移動し、2012 年 9 月 12 日にチェックして、見つからなかった場合は次の日付に移動します。基本的に、日付を互いに近づけることはできません(最低1日離れています)。

TSQL の場合はカーソルでこれを実行できますが、MySQL で作業しているので、MySQL にそのようなものはありますか? または、このクエリを解決できるサブクエリのアプローチはありますか?

フィードバックをお寄せいただきありがとうございます。

4

3 に答える 3

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
于 2012-10-09T05:41:04.920 に答える
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
于 2012-10-01T10:15:08.230 に答える
1

私がmysqlクエリについて知っている限り、あなたがどうにかしてそれを書くことができれば、それはトリッキーでバグが多いでしょう。カーソルを使用することをお勧めします。カーソルの構文は次 のとおりです。カーソルの構文は次のとおりです。

于 2012-10-01T10:23:49.393 に答える