0

以下のクエリでは、日付範囲に従ってケース列に名前を付けることが期待されますが、すべてデフォルトでエラーになります。何が欠けていますか? mySQL で作業してからかなりの時間が経ちました。今日、明日、30日、60日、90日の期限切れの間隔に基づいてグループ化しようとしています。

    SELECT DATE_SUB(CURDATE(), INTERVAL 1 DAY)AS rDate,

    CURDATE()AS rDate,DATE_ADD(CURDATE(), INTERVAL 1 DAY)AS rDate,

    DATE_ADD(CURDATE(), INTERVAL 7 DAY)AS rDate,

    DATE_ADD(CURDATE(), INTERVAL 14 DAY)AS rDate,

    DATE_ADD(CURDATE(), INTERVAL 30 DAY)AS rDate,

    DATE_ADD(CURDATE(), INTERVAL 60 DAY)AS rDate,

    DATE_ADD(CURDATE(), INTERVAL 90 DAY)AS rDate,

    CASE a.nextDueDate

    WHEN a.nextDueDate < CURDATE() THEN 'Overdue'

    WHEN a.nextDueDate > CURDATE() AND a.nextDueDate < (DATE_ADD(CURDATE(), INTERVAL 7 
    DAY))THEN '7 Days'

    WHEN a.nextDueDate > CURDATE() AND a.nextDueDate < (DATE_ADD(CURDATE(), INTERVAL 
    14 DAY))THEN '15 Days'

    WHEN a.nextDueDate > CURDATE() AND a.nextDueDate < (DATE_ADD(CURDATE(), INTERVAL 30 DAY))THEN '30 Days'

    WHEN a.nextDueDate > CURDATE() AND a.nextDueDate < (DATE_ADD(CURDATE(), INTERVAL 60 DAY))THEN '60 Days'

    WHEN a.nextDueDate > CURDATE() AND a.nextDueDate < (DATE_ADD(CURDATE(), INTERVAL 90 DAY))THEN '90 Days'

    ELSE 'Error'

    END,

    g.groupId,g.name AS groupName,l.logId,l.name AS logName, i.itemID,

    i.name AS itemName, le.userName,completed, i.optimalMin,i.optimalMax ,le.value,

    u.name AS unitDescription,

    g1.parentId AS parentId1, g1.name AS group1Name,g2.parentId AS parentId2, g2.name 
    AS group2Name,

    g3.parentId AS parentId3, g3.name AS group3Name,

    a.name AS activityName,scheduleType,scheduleInterval,a.details,nextDueDate

    FROM logExceptions le

    INNER JOIN logs l ON l.logID = le.logID

    INNER JOIN groups g ON g.groupId = l.groupId

    INNER JOIN items i ON le.itemId = i.itemId

    INNER JOIN activities a ON l.logId = a.logId

    LEFT JOIN units u ON i.unitId = u.unitId

    LEFT JOIN groups g1 ON g.parentId = g1.groupId

    LEFT JOIN groups g2 ON g1.parentId = g2.groupId

    LEFT JOIN groups g3 ON g2.parentId = g3.groupId

    WHERE  nextDueDate IS NOT NULL
4

1 に答える 1

2

キーワードa.nextDueDateの後から削除します。CASE

CASE式には次の 2 つの形式があります。

CASE <expression>
    WHEN <test-value1> THEN <result-value1>
    WHEN <test-value2> THEN <result-value2>
    ...
    ELSE <else-value>
END

この形式では、 の値が<expression>each と比較さ<test-valueN>れ、一致すると、対応する<result-valueN>が返されます。一致するものがない場合は、<else-value>が返されます。switchこの形式は、他のプログラミング言語のorcaseステートメントに似ています。

他の形式は次のとおりです。

CASE WHEN <test-expression1> THEN <result-value1>
     WHEN <test-expression2> THEN <result-value2>
     ...
     ELSE <else-value>
END

この場合、それぞれ<test-expressionN>が評価され、1 つが true の場合、対応する<result-valueN>ものが返されます。真でない場合は、<else-value>が返されます。これはif/then/elseif/else、他のプログラミング言語と同様です。

後者のタイプの を使用しているためCASE、 の直後に式を記述しないでくださいCASE

于 2013-10-29T05:12:41.177 に答える