2017-11-01 5 views
0

(それは他の行が、クエリで使用されて、以下に示すものを有している)は、以下の表を想像し、テーブル内のフィールドに応じてdate_add間隔タイプを変更するにはどうすればよいですか?

+-------------------+-----------------+---------------------+ 
| INTERVAL_QUANTITY | INTERVAL_UOM_ID | LAST_UPDATED_STAMP | 
+-------------------+-----------------+---------------------+ 
| 10    | TF_wk   | 2017-10-31 17:21:40 | 
| 20    | TF_mon   | 2017-10-30 17:21:40 | 
| 30    | TF_day   | 2017-10-29 17:21:40 | 
+-------------------+-----------------+---------------------+ 

キー

  • TF_wk => WEEK
  • TF_mon => MONTH
  • TF_day => DAY

さて、私は次のクエリを持って、

SELECT 
    * 
FROM 
    product_maint 
WHERE 
    (INTERVAL_UOM_ID = 'TF_day' OR INTERVAL_UOM_ID = 'TF_wk' OR INTERVAL_UOM_ID = 'TF_mon') 
    AND DATEDIFF(DATE(DATE_ADD(LAST_UPDATED_STAMP, INTERVAL INTERVAL_QUANTITY DAY)), DATE(NOW())) <= 0; 

問題も同様に、それは10TF_wkINTERVAL_UOM_IDINTERVAL_QUANTITYを持つ行を選択したときに、それは実際にはない1070日に追加する必要があり、 INTERVAL_UOM_IDTF_monであり、INTERVAL_QUANTITY20であり、それは560日(すべての計算が正しいと仮定します)に追加する必要があります。

このロジックを実装するにはどうすればよいですか?

答えて

1

各区間を別々に確認する必要があります。私はCURDATE()NOW()を変更

WHERE (INTERVAL_UOM_ID = 'TF_day' AND 
     LAST_UPDATED_STAMP > CURDATE() - INTERVAL INTERVAL_QUANTITY DAY 
    ) OR 
     (INTERVAL_UOM_ID = 'TF_wk' AND 
     LAST_UPDATED_STAMP > CURDATE() - INTERVAL INTERVAL_QUANTITY WEEK 
    ) OR 
     (INTERVAL_UOM_ID = 'TF_mon' AND 
     LAST_UPDATED_STAMP > CURDATE() - INTERVAL INTERVAL_QUANTITY MONTH 
    ) 

注:私はあなたがしたいと思います。私は時間の要素があなたがしたいことにとって重要だとは思わない。また、日付の算術だけで動作するようにロジックを変更しました。

+0

これは何らかの理由で上記のクエリを使用しているようですが、すべての行が表示され、ロジックがどこかに壊れていますか? – Script47

+0

'TF_ *'チェックとDATEチェックを組み合わせるロジックを使用して、私の比較方法を使用したときに私のために働きました。だから、基本的には: ' \t product_maint FROM \t * をSELECT WHERE \t(INTERVAL_UOM_ID = 'TF_day' \tとDATEDIFF(DATE(DATE_ADD(LAST_UPDATED_STAMP、INTERVAL INTERVAL_QUANTITY DAY))、DATE(NOW()))<= 0 )OR( \t INTERVAL_UOM_ID = 'TF_wk' \t AND DATEDIFF(DATE_ADD(DATE(LAST_UPDATED_STAMP)、INTERVAL INTERVAL_QUANTITY WEEK)、DATE(NOW()))<= 0)OR(INTERVAL_UOM_ID = 'TF_mon' \t AND DATEDIFF( DATE(DATE_ADD(LAST_UPDATED_STAMP、INTERVAL INTERVAL_QUANTITY MONTH))、DATE(NOW()))<= 0); ' – Script47

関連する問題