2013-08-23 37 views
0

如何使用動態創建的字段在DATE_SUB計算中使用?使用基於動態字段的DATE_SUB()

我有下面這個SQL:

SELECT *, 
     CASE 
      WHEN `currentDate` IS NULL 
      THEN 
       `lastDate` 
      ELSE 
       `currentDate` 
     END AS `useDate`, 
     CASE 
      WHEN `type` = 'weekly' 
       THEN DATE_SUB(`useDate`, INTERVAL 1 WEEK) 
      END AS `nextDate` 
    FROM `aTable` 

這是不行的,因爲錯誤「#1054 - 未知列‘’在'字段列表」 useDate

查詢工作正常,如果我使用Select *中的實際字段,但不接受動態創建的字段。

什麼適當的方式來處理這個,而不必做'情況下'查詢?

回答

0

您是否嘗試過使用WHEN中的CASE子句?

SELECT *, 
     CASE 
      WHEN `currentDate` IS NULL 
      THEN `lastDate` 
      ELSE `currentDate` 
     END AS `useDate`, 
     CASE 
      WHEN `type` = 'weekly' 
       THEN DATE_SUB(
         CASE 
          WHEN `currentDate` IS NULL 
          THEN `lastDate` 
          ELSE `currentDate` 
         END AS `useDate` 
        , INTERVAL 1 WEEK) 
      END AS `nextDate` 
    FROM `aTable` 
+0

這就是我想這樣做的一種方式,但它只是似乎凌亂(考慮到將有多個'type'的)和潛在的代碼並不需要在那裏 – Mechzeit

+0

哦,我增加了一倍看到。你問了一個解決方法,所以我給了你一個解決方法。國際海事組織你應該提供一些信息,「你不想使用案件 - 何時何地」。是的,這很混亂。子查詢,視圖或臨時表怎麼樣? – iiro

+0

對不起,子查詢可能是我的下一個嘗試;只是想知道是否有一個乾淨的方式來做到這一點,雖然:( – Mechzeit