创建一个列,返回按每行的条件选择的值

问题描述 投票:0回答:1

我在 MySql 上有一个带有卡车的数据库。我需要按此条件返回每行的特定值:

  • 如果卡车在过去 3 年内已退出流通,则该行必须返回:R
  • 如果卡车在过去 3 年内没有从流通中移除,则该行必须返回:ES
  • 如果卡车是新的,则该行必须返回:NV

对于我的价值观:

  • 当卡车投入流通时
  • 如果已被删除
  • 当它已被删除时,如果尚未删除,则值为 NULL

示例:

注册 已添加到流通中 已删除 删除日期
12345 2023年3月12日 0
45678 1999年2月14日 1 2023年10月17日
91011 2000年11月24日 0

我正在寻找这样的东西:

报名 R_ES_V
12345 NV
45678 R
91011 ES

我不知道怎么做这个。这只是查询的一部分,其余部分非常简单,这就是问题所在

sql mysql database
1个回答
0
投票

这是 MySQL 中
CASE WHEN
语句的理想用例。

  • 根据您的评论,您指定如果一辆卡车是在过去 3 年内添加的,则该卡车是新的。
    • 您可以通过更改
      SET @new_date = DATE_SUB(NOW(), INTERVAL 3 YEAR);
    • 来自定义此设置
    • 其他日期也是如此。
  • 您没有指定过去 3 年前添加但从未删除的车辆的边缘情况。在此查询中,该情况将为该列返回
    '?'
    。修改此查询以满足您的要求(如果存在)。
SET @new_date = DATE_SUB(NOW(), INTERVAL 3 YEAR);
SET @old_date = DATE_SUB(NOW(), INTERVAL 3 YEAR);

SELECT
       registration,
       CASE
          WHEN removed = 1 AND date_removed >= @old_date THEN 'R'
          WHEN removed = 1 AND date_removed < @old_date THEN 'ES'
          WHEN removed = 0 AND added_in_circulation >= @new_date THEN 'NV'
          ELSE '?'
       END as 'R_ES_NV'
FROM mytable

© www.soinside.com 2019 - 2024. All rights reserved.