SELECT trxbegdt FROM UPR30300 as a where trxbegdt + 间隔 14 天 = b.trxbegdt (SELECT trxbegdt FROM UPR30300 WHERE TRXBEGDT <= sysdate() and trxbegdt >= '2011-12-25' ) 由 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