2012-05-07 54 views
0

我有一张表,其中只包含未来20年的日期。我使用此表作为快速查找来确定与我的应用程序有关的某个日期的某些信息 - 例如,如果日期是假期,如果日期已标记为某个指示符等。从“有效”日期表中获取第n个日期

我要做的就是从指定的日期开始,从我的表格中拉第n个有效日期。从本质上讲,我只是用限制子查询的返回值来更新一个值。这里是我的代码,所以我得到了一个限制的错误。

UPDATE _piece_detail 
INNER JOIN mail_classes 
    ON mail_classes.class_id = _piece_detail.class_id 
SET _piece_detail.est_delivery_date = 
(SELECT date_value FROM date_lookup 
WHERE date_value >= _piece_detail.date_prepared AND holiday != 1 
LIMIT mail_classes.max_days,1) 
WHERE est_delivery_date IS NULL; 

我已经试过铸造mail_classes.max_days成一个整数,但仍没有运气。我需要这个变量,因为我需要计算的天数是基于邮件类的。

+0

将其存储在用户定义的变量中。 SET @max_dates:= ...',然后从LIMIT子句中引用:LIMIT @ max_dates。 – eggyal

回答

0

我解决了这个问题,通过创建一个函数并将其用于我的例程。功能如下:

CREATE DEFINER=`sample`@`%` FUNCTION `get_valid_date`(start_date DATE, added_days INT) RETURNS date 
    DETERMINISTIC 
BEGIN 
    DECLARE new_date DATE; 

    SELECT date_value 
    FROM date_tbl 
    WHERE date_tbl.date_value >= start_date 
     AND date_tbl.day_of_week != 1 
    LIMIT added_days,1 
    INTO new_date; 

    RETURN new_date; 

END 
0

试试这个:

(SELECT min(date_value) FROM date_lookup 
WHERE date_value >= _piece_detail.date_prepared AND holiday != 1) 

这将在指定日期之后返回第一个非假日。

如果您关心性能,请在表格中添加一个新列“nextNonHoliday”并预先计算这些值。

+0

这可能适用于NEXT有效日期,但是我正在查找基于max_days列的第n个有效日期。 –

0

LIMIT不能有可变参数,它们必须是常量。所以它不能是表字段值或用户定义的变量。我建议以下解决方案:

​​
相关问题