2012-05-07 8 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 @ max_dates'という' LIMIT'節から参照してください。 – 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は可変パラメータを持つことはできませんが、定数でなければなりません。したがって、テーブルフィールド値またはユーザー定義変数のいずれにもなりません。私は次の解決策を提案します:

​​
関連する問題