SELECT trxbegdt FROM UPR30300 as a where trxbegdt + interval 14 day = b.trxbegdt(SELECT trxbegdt FROM UPR30300 WHERE TRXBEGDT <= sysdate()and trxbegdt> = '2011-12-25')As b order by TRXBEGDT desc
この一定の間隔でローリング日付を取得するには、いくつかのバリエーションを使用できます。例えば
Datediff(day,a.trxbegdt,b.trxbegdt) = 14
dateadd(b.trxbegdt,14,day)= a.trbegdt
PS:モバイルで回答をフォーマットするのは非常に苦痛です。さらに、コードはロジックベースであるため、最後に実行して結果を表示し、さらに更新するためにコメントしてください。
一定の間隔で日付リストを生成するネストされたクエリを使用する代替回答。
クエリを実行して、今日から指定した日付までの日付リストを14日間隔で生成します
set @i:= 0;
SELECT date_format(DATE(ADDDATE('2012-10-05',
INTERVAL @i:=@i+14 DAY)),'%Y-%m-%d')
AS dateP, @i
FROM payroll
HAVING @i < datediff(now(), date '2012-10-05')
;
上記のクエリ出力
DATEP @IntervalDays
2012-10-19 14
2012-11-02 28
2012-11-16 42
2012-11-30 56
2012-12-14 70
レコードをフェッチすることを想定した最終クエリ
set @i:= 0;
SELECT distinct datestamp FROM payroll
WHERE date(datestamp) in (
SELECT DATE(ADDDATE('2012-10-05',
INTERVAL @i:=@i+14 DAY) ) AS dateP
FROM payroll
where @i < DATEDIFF(now(), date '2012-10-05')
)
;
ただし、一部のMYSQLエンジンの動作により、レコードをフェッチせず、日付との比較が無視されます。だから今のところ、あなたは上記の答えの方が良いと思います。知識を共有するという事実そのものの情報でこの投稿を更新したいと思いました。
コメントしてください:)
調査結果に関しては、mysqlがインストールされているローカルマシンではin
、句を。に置き換えることで、上記のクエリに対して適切に機能しますinner join
。ただし、SQLFIDDLEではまだ機能しません。したがって、回避策は、ネストされたselect
クエリ内で変数を削除することです。それ以上IN
の句もうまく機能していないようです。とにかく、節をinner join
上回ります。in
したがって、最終的な解決策は次のとおりです。:)
クエリ:
select p.id, p.datestamp, s.datep from
Payroll as p
inner join
(
SELECT DATE(DATE_ADD('2012-10-05',
INTERVAL @i:=@i+14 DAY) ) AS dateP
FROM Payroll, (SELECT @i:=0) r
where @i < DATEDIFF(now(), date '2012-10-05')
) as s
on p.datestamp = s.dateP
;
結果:
ID DATESTAMP DATEP
7 October, 19 2012 00:00:00+0000 October, 19 2012 00:00:00+0000
8 November, 02 2012 00:00:00+0000 November, 02 2012 00:00:00+0000
10 November, 16 2012 00:00:00+0000 November, 16 2012 00:00:00+0000
12 November, 30 2012 00:00:00+0000 November, 30 2012 00:00:00+0000