我希望下面的查询根据日期范围命名案例列 - 但是所有都默认为错误 - 我缺少什么?自从我在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
答案 0 :(得分:2)
从a.nextDueDate
关键字后删除CASE
。
CASE
表达式有两种形式:
CASE <expression>
WHEN <test-value1> THEN <result-value1>
WHEN <test-value2> THEN <result-value2>
...
ELSE <else-value>
END
在此表单中,<expression>
的值与每个<test-valueN>
进行比较,如果匹配,则返回相应的<result-valueN>
。如果不匹配,则返回<else-value>
。此表单类似于其他编程语言中的switch
或case
语句。
另一种形式是:
CASE WHEN <test-expression1> THEN <result-value1>
WHEN <test-expression2> THEN <result-value2>
...
ELSE <else-value>
END
在这种情况下,将评估每个<test-expressionN>
,如果一个为真,则返回相应的<result-valueN>
。如果均不为真,则返回<else-value>
。这类似于其他编程语言中的if/then/elseif/else
。
由于您使用的是CASE
后一种类型,因此您不应该在CASE
之后立即使用表达式。