假设我有一个数据库来跟踪其结构如下的浇水植物:
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`;
但这将为“玫瑰”返回“红色”警告,而不是预期的空字符串,并且对于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