2012-05-07 85 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不能有可變參數,它們必須是常量。所以它不能是表字段值或用戶定義的變量。我建議以下解決方案:

​​
相關問題