0

嗨,我有点卡在这里。我正在尝试为名为“绿色”、“黄色”和“红色”的合同创建 3 个标签。标签由公式 contractdate-curdate() 标识。- 如果距离超过 90 天,则为绿色。- 黄色 - 如果 = 结束日期在 31 到 89 天之间 - 红色如果结束日期为 30 天或更短

我需要一种方法来为标签创建一个列并将每个合同放在各自的颜色中,或者为每种颜色创建 3 个带有标识符的列?

这些是我提出的几个查询,但没有运气。

select 
    contractname, contractenddate
from
    contract
where
    contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 30 DAY)
        and contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 60 DAY)
and contractenddate between CurDate() and Date_Add(CurDate(), INTERVAL 90 DAY)

select contractname, date_sub(contractenddate,interval 0-30 day)as Red,
date_sub(contractenddate,interval 31-89 day)as Yellow,
date_sub(contractenddate,interval 90 day)as Green
 from contract

我知道这些是不正确的,但也许有人可以帮助建立这些?将不胜感激!!!最后一点是我无法更改数据库结构,我只能使用 select 语句。

提前感谢一吨!

4

1 回答 1

1

像这样的工作?研究使用DATEDIFFand CASE

SELECT contractname, 
  contractenddate,
  CASE
      WHEN DATEDIFF(CurDate(),contractenddate) <= 30 THEN 'Red'
      WHEN DATEDIFF(CurDate(),contractenddate) < 90 THEN 'Yellow'
      ELSE 'Green'
  END Label
FROM Contract

这是SQL 小提琴

如果您想要离开的天数,您可以在 SQL 语句中添加以下内容:

DATEDIFF(CurDate(),contractenddate) DaysAway

或者,如果您需要红色、黄色和绿色作为列,则非常相似的方法会起作用:

SELECT contractname, 
  contractenddate,
  CASE WHEN DATEDIFF(CurDate(),contractenddate) <= 30 THEN 'X' ELSE '' END 'Red',
  CASE WHEN DATEDIFF(CurDate(),contractenddate) < 90 AND DATEDIFF(CurDate(),contractenddate) > 30 THEN 'X' ELSE '' END 'Yellow',
  CASE WHEN DATEDIFF(CurDate(),contractenddate) >= 90 THEN 'X' ELSE '' END 'Green'
FROM Contract

我已经放了一个“X”来标记哪个有哪个。不太清楚你在找什么。

更多的小提琴

祝你好运。

于 2013-01-31T20:15:04.650 回答