2016-05-16 9 views
0

とてもシンプルに見えますが、少なくとも私にとってはとても難しいです。私が持っているものmysql select where - 開始日からn日ごとに繰り返す - 2つの日付の間

:に似 MySQLのスキーム:

start_date | end_date | interval 
-------------------------------- 
2016-05-01 00:00:00 | 2016-05-26 00:00:00 | 3 

私は結果として達成したいこと: 実際に、これはハードになり、何かを追加します。 現在の日付に応じてこれらの結果を取得します。今日は2016年5月5日と言いましょう。私が望む結果は、次のとおりです。

*2016-05-01* <- past date so no match 
*2016-05-04* <- past date so no match 
**2016-05-07** 
**2016-05-10** 
**2016-05-13** 
etc... 

可能であれば、一時表は必要ありません。

モジュラスは、少なくとも私がそれを試したすべての異なる方法のために、私にとっては機能しません。一般的には、データ表示の問題は、最適なアプリケーション・レベルのコードで処理されている

+0

ありがとうございます。イチゴ。 – Zhi

答えて

0

が、ちょうど楽しみのために...私は整数のテーブルを使用していますが、あなたが好きなら、あなたが代わりにSELECT 1 i UNION SELECT 2 UNION ... etcを使用することができます

注意。 ..

DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table(start_date DATE,end_date DATE,date_interval INT NOT NULL); 

INSERT INTO my_table VALUES 
('2016-05-01','2016-05-26',3); 

SELECT * FROM my_table; 
+------------+------------+---------------+ 
| start_date | end_date | date_interval | 
+------------+------------+---------------+ 
| 2016-05-01 | 2016-05-26 |    3 | 
+------------+------------+---------------+ 

SELECT * FROM ints; 
+---+ 
| i | 
+---+ 
| 0 | 
| 1 | 
| 2 | 
| 3 | 
| 4 | 
| 5 | 
| 6 | 
| 7 | 
| 8 | 
| 9 | 
+---+ 

SELECT start_date + INTERVAL i*date_interval DAY dt 
    FROM my_table 
    , ints 
WHERE start_date + INTERVAL i*date_interval DAY <= end_date; 
+------------+ 
| dt   | 
+------------+ 
| 2016-05-01 | 
| 2016-05-04 | 
| 2016-05-07 | 
| 2016-05-10 | 
| 2016-05-13 | 
| 2016-05-16 | 
| 2016-05-19 | 
| 2016-05-22 | 
| 2016-05-25 | 
+------------+ 
+0

ありがとう、私は実際に私に助けを求めるようにしたことを追加しました。あなたもそれに取り組むことができれば、私はとても感謝しています! – Zhi

+0

おそらくあなた自身のためにそのビットを出すことができます;-) – Strawberry

+0

フェア十分:)) – Zhi

関連する問題