我正在尝试过滤payroll dates
,结果会在up until today
之后每隔14天向我显示'2011-12-25'。
我的查询是:
SELECT trxbegdt FROM UPR30300
WHERE TRXBEGDT <= getdate() and trxbegdt >= DATEADD( DAY ,14, '2011-12-25')
group by trxbegdt
order by TRXBEGDT desc
我遇到的问题是结果显示超出14天间隔的日期,这不是正常的工资核算交易开始日期。有人会有解决方案来遵守我的条件吗?
答案 0 :(得分:3)
WITH PayrollDates AS
(
SELECT CONVERT(datetime,'2011-12-25') AS PayrollDate
UNION ALL
SELECT DATEADD(DAY,14,PayrollDate) AS PayrollDate
FROM PayrollDates
WHERE DATEADD(DAY,14,PayrollDate) <= GETDATE()
)
SELECT
UPR30300.trxbegdt
FROM UPR30300
INNER JOIN PayrollDates
ON UPR30300.trxbegdt = PayrollDates.PayrollDate
答案 1 :(得分:0)
<击> 选择trxbegdt来自UPR30300作为 其中trxbegdt + interval 14 day = b.trxbegdt (从UPR30300中选择trxbegdt 在哪里TRXBEGDT&lt; = sysdate()和trxbegdt&gt; ='2011-12-25') 作为b 由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
查询中使用delcare变量。进一步的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