mysql - 在一列中选择具有多个选项的单个值

标签 mysql sql

当两个行号值按顺序相同时,我需要根据日期选择一个值。

这里有一个 sqlfiddle 只是为了准确显示我的表的结构。 http://sqlfiddle.com/#!9/2ccf800/1

这是我尝试过的:

SELECT DISTINCT `Line Number`
              , `Contract Number`
              , `Date Promised`
              , `roytecp_n`
           FROM otis_pos
          RIGHT 
           JOIN `otis rev link` 
             on otis_pos.`Item Number` = `otis rev link`.otis_pn
          WHERE otis_pos.`Contract Number` <> '' 
            AND (
  (`Date Promised` <= CURRENT_DATE() + INTERVAL 28 DAY 
    AND (roytecp_n Like 'OTH%' 
        OR roytecp_n Like '9O%' 
        OR roytecp_n Like '81%'
        OR roytecp_n is NULL
  ) 
  OR 
  ( `Date Promised` > CURRENT_DATE() + INTERVAL 28 DAY
    AND (roytecp_n Like '88%' 
        OR roytecp_n Like '89%' 
        OR roytecp_n IS NULL
    )
  )
)

这将返回两组值,而不是指定的值之一。

这是我的数据:

Line Number    Contract Number    Date Promised    roytecp_n
   1               648756          2020-01-24    
   2               648756          2020-01-24      OTHW600HZ974
   2               648756          2020-01-24      89OTHW600HZ974
   3               648756          2020-01-24      OTHW600HY998
   3               648756          2020-01-24      89OTHW600HY998
   1               648756          2020-01-24    
   2               648756          2020-01-24      OTHW600DV998
   2               648756          2020-01-24      89OTHW600DV998
   3               648756          2020-01-24      9O04174AKV96-B
   3               648756          2020-01-24      OTHWC00DT998

以下是当值大于或等于 current_date + 28 天时需要返回数据的方式:

Line Number    Contract Number    Date Promised    roytecp_n
   1               648756          2020-01-24    
   2               648756          2020-01-24      89OTHW600HZ974
   3               648756          2020-01-24      89OTHW600HY998
   1               648756          2020-01-24    
   2               648756          2020-01-24      89OTHW600DV998
   3               648756          2020-01-24      9O04174AKV96-B
   4               648756          2020-01-24      OTHWC00DT998  

以下是当值小于或等于 current_date + 28 天时需要返回数据的方式

Line Number    Contract Number    Date Promised    roytecp_n
   1               648756          2020-01-24    
   2               648756          2020-01-24      OTHW600HZ974
   3               648756          2020-01-24      OTHW600HY998
   1
   1               648756          2020-01-24    
   2               648756          2020-01-24      OTHW600DV998
   3               648756          2020-01-24      9O04174AKV96-B
   4               648756          2020-01-24      OTHWC00DT998

最佳答案

似乎你错了(在第一个和

  SELECT DISTINCT `Line Number`
                , `Contract Number`
                , `Date Promised`
                , `roytecp_n`
  FROM otis_pos
  RIGHT JOIN `otis rev link` 
               on otis_pos.`Item Number` = `otis rev link`.otis_pn
  WHERE otis_pos.`Contract Number` <> '' 
  AND (`Date Promised` <= CURRENT_DATE() + INTERVAL 28 DAY 
        AND (roytecp_n Like 'OTH%' 
            OR roytecp_n Like '9O%' 
            OR roytecp_n Like '81%'
            OR roytecp_n is NULL
      ) 
      OR 
      ( `Date Promised` > CURRENT_DATE() + INTERVAL 28 DAY
        AND (roytecp_n Like '88%' 
            OR roytecp_n Like '89%' 
            OR roytecp_n IS NULL
        )
      )
    )

http://sqlfiddle.com/#!9/2ccf800/3

关于mysql - 在一列中选择具有多个选项的单个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59039122/

相关文章:

sql - MySQL:将 NULL 类型转换为 0

php - 将包含 "` "or " ' "的字符串插入数据库表 - Php

php - 如何从数据库中获取数据并在php页面上回显?

php - 使用 SQL 数据在 PHP 中进行预测

SQL 2008+ NOLOCK 与 READPAST 报告准确性的注意事项

java - 检测行是否已更新或插入

从Excel表导入MySQL数据

php - 无法用PHP访问MYSQL

mysql - SQL多表查询速度慢

sql - 下限 LIMIT/高 OFFSET 的成本非常高