假设我有一个数据库来跟踪结构如下所示的浇水植物:
Table: "Plants"
ID Plants
----------------------------------
1 Roses
2 Daisies
3 Sunflowers
4 Marigolds
5 Daffodils
Table: "Maintenance"
ID Plant_ID Activity Date
-------------------------------------
1 1 Water 2011-09-09
2 1 Water 2011-08-02
3 2 Water 2011-08-15
4 3 Water 2010-07-01
5 4 Weed 2010-07-01
我正在尝试编写一个查询,告诉我们植物是否需要浇水,如果需要,需要多严重。换句话说:如果植物在过去 30 天内没有浇水,则返回“黄色”警告级别;如果在过去 60 天内没有浇水,则为“红色”警告级别。
这是我目前所处的位置:
SELECT Plants.Plants,
IF ( DATEDIFF(CURRENT_DATE, MAX(Maintenance.Date)) < 30 AND maintenance.type = "Water", '',
IF ((DATEDIFF(CURRENT_DATE, MAX(Maintenance.Date)) >= 60 AND maintenance.type = "Water") or maintenance.date IS NULL, 'Red', 'Yellow')
) AS `Water Warning`,
IF ( DATEDIFF(CURRENT_DATE, MAX(Maintenance.Date)) < 30 and maintenance.type = "Weed" , '',
IF ((DATEDIFF(CURRENT_DATE, MAX(Maintenance.Date)) >= 60 and maintenance.type = "Weed") or maintenance.date IS NULL, 'Red', 'Yellow')
) AS `Weeding Warning`
FROM `plants`
LEFT JOIN `maintenance` ON `maintenance`.`plant_id` = `plants`.`id`
GROUP BY `plants`.`id`;
但这会为“Roses”返回“红色”警告,而不是预期的空字符串,并且没有 Maintenance.Activity 的条件。请注意,同一查询还需要为除草和其他事件执行类似的功能,因此在 WHERE 子句中进行过滤可能不是答案。
这是我想要的:
Results
ID Plants "Water Warning" "Weed Warning"
----------------------------------------------------
1 Roses "" "Red"
2 Daisies "Yellow" "Red"
3 Sunflowers "Red" "Red"
4 Marigolds "Red" ""
5 Daffodils "Red" "Red"
最佳答案
使用下面的语句,你只需要用植物名称加入表格。
SELECT *,
CASE
WHEN DATEDIFF(CURRENT_DATE, DATE) >= 60 THEN 'RED'
WHEN DATEDIFF(CURRENT_DATE, DATE) >= 30 THEN 'YELLOW'
END AS FLAG
FROM test_table
关于mysql - 查看最近x天是否没有创建记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7365033/