首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查看最近x天内是否未创建任何记录

查看最近x天内是否未创建任何记录
EN

Stack Overflow用户
提问于 2011-09-10 01:02:12
回答 2查看 94关注 0票数 1

假设我有一个数据库来跟踪浇水植物,它的结构如下:

代码语言:javascript
运行
复制
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天内没有浇水,则返回警告级别“红色”。

到目前为止,我的想法是:

代码语言:javascript
运行
复制
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子句中的过滤可能不是答案。

这是我想要的:

代码语言:javascript
运行
复制
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"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-10 07:44:16

我真的希望有一个更优雅的解决方案,但这是有效的:

代码语言:javascript
运行
复制
SELECT 
`plants`.`plants`,
IF((MAX(IF(`maintenance`.`type` = 'Water',
        `maintenance`.`date`,
        NULL)) IS NULL) OR ((DATEDIFF(CURRENT_DATE,
            MAX(IF(`maintenance`.`type` = 'Water',
                `maintenance`.`date`,
                NULL)))) > 30),
    (IF((MAX(IF(`maintenance`.`type` = 'Water',
            `maintenance`.`date`,
            NULL)) IS NULL) OR ((DATEDIFF(CURRENT_DATE,
                MAX(IF(`maintenance`.`type` = 'Water',
                    `maintenance`.`date`,
                    NULL)))) > 90),
        'red',
        'yellow')),
    '') AS `Water Warning`,
IF((MAX(IF(`maintenance`.`type` = 'Weed',
        `maintenance`.`date`,
        NULL)) IS NULL) OR ((DATEDIFF(CURRENT_DATE,
            MAX(IF(`maintenance`.`type` = 'Weed',
                `maintenance`.`date`,
                NULL)))) > 30),
    (IF((MAX(IF(`maintenance`.`type` = 'Weed',
            `maintenance`.`date`,
            NULL)) IS NULL) OR ((DATEDIFF(CURRENT_DATE,
                MAX(IF(`maintenance`.`type` = 'Weed',
                    `maintenance`.`date`,
                    NULL)))) > 90),
        'red',
        'yellow')),
    '') AS `Weed Warning`
FROM
`plants`
    LEFT JOIN
`maintenance` ON `maintenance`.`plant_id` = `plants`.`id`
GROUP BY `plants`.`id`;
票数 0
EN

Stack Overflow用户

发布于 2011-09-10 01:12:05

使用下面的语句,您只需要将表与植物名称连接起来即可。

代码语言:javascript
运行
复制
SELECT *, 

CASE
    WHEN DATEDIFF(CURRENT_DATE, DATE) >= 60 THEN 'RED'
    WHEN DATEDIFF(CURRENT_DATE, DATE) >= 30 THEN 'YELLOW'
END AS FLAG
FROM test_table
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7365033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档