mysql查询逻辑

时间:2011-11-24 12:17:56

标签: mysql select logic

我有一个SQL查询,显示车辆的交付详情。 (它使用最大值来从每个车辆停靠点的一系列列中获取最大值)

SELECT deliveryid AS deliverynumber, loadid1 AS loadnumberdate, 
       haulieraccepted AS haulier, 
       greatest(drop1arrivedatetime, drop2arrivedatetime, drop3arrivedatetime, 
                drop4arrivedatetime, drop5arrivedatetime) AS planneddate, 
       date(greatest(ActualDrop1Arrive, ActualDrop2Arrive, ActualDrop3Arrive, 
                     ActualDrop4Arrive, ActualDrop5Arrive )) AS actualenddate,
       mitigation
    FROM deliverydetails
    WHERE deliveryid=44

输出

deliverynumber | loadnumberdate | haulier         | planneddate         | actualenddate | mitigation 
44             | 484487         | stols transport | 2011-11-26 15:50:00 | 2011-11-26    | customerdelay

如何添加mysql查询以比较列'planneddate'和'actualenddate'?如果日期相同则将查询字段设置为'ontime'否则如果actualenddate> planneddate则'deliverylate'。理想情况下,我想要以下输出:

deliverynumber | loadnumberdate | haulier         | planneddate         | actualenddate | mitigation    | Status
44             | 484487         | stols transport | 2011-11-26 15:50:00 | 2011-11-26    | customerdelay | ontime.

感谢您的帮助。

3 个答案:

答案 0 :(得分:2)

您可以使用CASE语句或IF function。也许是这样的事情:

SELECT ....,  IF(actualenddate>planneddate,'deliverylate','ontime') AS status FROM ....

答案 1 :(得分:1)

如果条件和日期转换功能根据....检查和显示使用mysql

答案 2 :(得分:1)

您可以将原始查询包装为子查询。这将重命名列。然后,使用case ... then子句添加列。

假设您的原始查询工作正常,它将如下所示:

select
    *,
    case when (... some comparison on 'planneddate' and 'actualenddate' ...) 
         then <true output> 
             else <false output> end
from
    (<your original query>) as myalias;

诀窍是重命名子查询中的列,允许您使用新名称(planneddateactualenddate)。