我有两张桌子,一张是任务清单。每个任务(行)由一对唯一的story_id
和pos_id
(销售点ID)指定,并包含日期last_completed
。另一个表是具有priority
号码的POS列表。
这就是我需要的:我将为每个任务x
调用包含自上次完成以来的时间除以其POS优先级编号的数量。我需要每个故事的所有x
的总和超过所有故事的POSes。
最重要的是,有些任务从未完成,因此last_completed
为NULL
;对于这些任务,我想将x
设置为10。
这是我尝试过的,但我在WHERE
:
SELECT t.story_id, SUM(
CASE
WHEN t.last_completed IS NULL THEN 10
ELSE DATEDIFF(NOW(), t.last_completed)/p.priority
END
WHERE t.pos_id = p.id) AS weeks
FROM test_task t, test_pos p
GROUP BY story_id;
我还在WHERE
的同一行尝试了ELSE
子句,但这也没有用。
有人可以告诉我如何将priority
与last_completed
内CASE
内的SUM
日期相关联吗?
答案 0 :(得分:3)
据推测,这是您想要的查询:
SELECT t.story_id,
SUM(CASE WHEN t.last_completed IS NULL THEN 10
ELSE DATEDIFF(NOW(), t.last_completed)/p.priority
END) as weeks
FROM test_task t JOIN
test_pos p
ON t.pos_id = p.id
GROUP BY story_id;
您的情况应该在明确on
的{{1}}子句中。这与join
子句中的case
表达式无关。
答案 1 :(得分:0)
您错误地使用了自己的条款 - from
应该在where
之前出现。此外,您需要关闭sum
的括号:
SELECT t.story_id, SUM(
CASE
WHEN t.last_completed IS NULL THEN 10
ELSE DATEDIFF(NOW(), t.last_completed)/p.priority
END) AS weeks
FROM test_task t, test_pos p
WHERE t.pos_id = p.id
GROUP BY story_id;