データベーステーブルに存在しない日付を取得するためのクエリがあります。日付範囲から欠落している日付を見つけよう
私はデータベースに以下の日付があります。私は、クエリ
の下に試してみました2013-08-02
2013-08-02
2013-08-02
2013-08-03
2013-08-05
2013-08-08
2013-08-08
2013-08-09
2013-08-10
2013-08-13
2013-08-13
2013-08-13
と私は以下のように予想される結果が欲しい、
2013-08-01
2013-08-04
2013-08-06
2013-08-07
2013-08-11
2013-08-12
あなたは結果がデータベースに存在しない6日を持って見ることができるように、
SELECT
DISTINCT DATE(w1.start_date) + INTERVAL 1 DAY AS missing_date
FROM
working w1
LEFT JOIN
(SELECT DISTINCT start_date FROM working) w2 ON DATE(w1.start_date) = DATE(w2.start_date) - INTERVAL 1 DAY
WHERE
w1.start_date BETWEEN '2013-08-01' AND '2013-08-13'
AND
w2.start_date IS NULL;
ただし、上記の結果は次のようになります。あなたはその必要はありませんその14から4つのバックの日付を私に与えて見るが、そのまだその理由は、左の参加の3日を含めることはできませんよう
2013-08-04
2013-08-14
2013-08-11
2013-08-06
。
私の質問に目を通して、私がこれを行うための最善の方法を教えてください。
お時間をいただきありがとうございます。
"結果には、データベースに存在しない6つの日付が表示されます。"これは私を笑わせる。データには何百万もの日付がありません(少なくとも、人間は日付が何であるかを認識しています)。どのように開始値と終了値が分かっていますか? –
関係代数の性質上、DBに不特定の*欠損データの数を推論させることは不可能です。あなたのテーブルにすでに存在する2つの日付の間に、空でない日付*範囲*を見つけるのが最善です。 –
@GordonLinoffあなたがクエリを見るのを忘れたと思う...私はすでに 'w1.start_date BETWEEN '2013-08-01'と '2013-08-13''を設定しているので、6つの日付が失われていると言うことができます... –