我们的考勤数据库是一个普适/Actian数据库。我想要做的是创建一个查询,它只列出了接下来的14天。然后,我将将此日期列表与员工记录交叉应用,以便有效地列出今后14天的人员/日期列表。
我很容易在SQL服务器上使用递归的CTE来完成这个任务。我也可以在Server中使用一个循环来完成这个任务,但是我无法用普适SQL解决这个问题。循环只能存在于存储过程和触发器中。
环顾四周,我认为我找到并修改的这段代码可能会起作用,但它不起作用(而且进一步的研究表明,在普适的环境中根本没有递归选项。
WITH RECURSIVE cte_numbers(n, xDate)
AS (
SELECT
0, CURDATE() + 1
UNION ALL
SELECT
n+1,
dateAdd(day,n,xDate)
FROM
cte_numbers
WHERE n < 14
)
SELECT
xDate
FROM
cte_numbers;我只是想知道是否有人可以帮助我编写一个SQL查询,在存储过程之外为我提供这个日期列表。
发布于 2021-12-11 16:18:42
创建这样的表时:
CREATE TABLE dates(d DATE PRIMARY KEY, x INTEGER);并创建这样的第一张记录:
INSERT INTO dates VALUES ('2021-01-01',0);然后,您可以使用这个语句,每次执行该语句时,都会加倍表dates中的记录数。(所以你需要运行几次
当您运行它10次时,表dates将有21个oktober 2023作为最后一个日期。当你运行12次时,最后一次约会将是2032年3月19日。
INSERT INTO dates
SELECT
DATEADD(DAY,m.m+1,d),
x+m.m+1
from dates
cross join (select max(x) m from dates) m
order by d;当然,可以用next语句删除列x (可选),但不能使用前面的语句添加更多记录:
ALTER TABLE dates DROP COLUMN x;最后,从今天起的14天内返回:
SELECT d
FROM DATES
WHERE d BETWEEN CURDATE( ) AND DATEADD(DAY,13,CURDATE());https://stackoverflow.com/questions/70246426
复制相似问题