2013-08-23 33 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