mysql - 带条件调用多列的 SQL 查询(带 NAs)

标签 mysql sql r conditional-statements rmysql

这是我 previous question 的一个连续问题.我想编写一个 SQL 查询,调用多个带条件的列。我正在使用 RMySQL 包开发 R Studio。我的服务器是 MySQL。

表格看起来像这样。

organisation          A           B           C           D
Ikea         2018-04-01  2018-05-07  2018-05-09  2018-05-01
Ikea         2018-06-01  2018-05-03  2018-05-29          NA   
Orange       2018-04-02  2018-05-01  2018-07-08  2018-05-26 
Ikea         2018-06-02  2018-05-01          NA  2018-05-26
Nestle       2018-06-02  2018-05-01          NA  2018-05-26
Ikea                 NA  2018-05-05  2018-04-02  2018-06-01

我想得到组织是宜家的一行,四列(A、B、C、D)中最早的日期在 2018-05-01 和 2018-05-31 之间。

在包含 NA 值的行中,我想忽略 NA 并查看其余值中最早的日期是什么时候。例如,对于第二行,最早的日期是“2018-05-03”(B列),因此它符合条件。

因此只有上面原表的第二行第四行符合条件。而我想要得到的结果应该是:

organisation          A           B           C           D
Ikea         2018-06-01  2018-05-03  2018-05-29          NA    
Ikea         2018-06-02  2018-05-01          NA  2018-05-26

我应该如何编写 SQL 查询? 这是我从上一个问题得到答案后的尝试,但它不适用于带有 NA 的行。

SELECT * FROM myTable 
WHERE organisation LIKE Ikea
LEAST(A, B, C, D) >= '2018-05-01' AND
LEAST(A, B, C, D) < '2018-06-01'

感谢您提供的各种帮助!

最佳答案

只需使用coalesce():

SELECT *
FROM myTable 
WHERE organisation LIKE 'Ikea' AND
      LEAST(COALESCE(A, '2019-01-01'), COALESCE(B, '2019-01-01'), COALESCE(C, '2019-01-01'), COALESCE(D, '2019-01-01')) >= '2018-05-01' AND
      LEAST(COALESCE(A, '2019-01-01'), COALESCE(B, '2019-01-01'), COALESCE(C, '2019-01-01'), COALESCE(D, '2019-01-01')) < '2018-06-01';

'2019-01-01' 是范围之后的任意日期。

关于mysql - 带条件调用多列的 SQL 查询(带 NAs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51043189/

相关文章:

mysql - 如何用百分比值更新Mysql数据库表

mysql - 具体外键解释

mysql - 带有计算值的 SQL WHERE 子句

R Stargazer - 手动指定 R^2 并写入 .tex

java - 程序卡住 Java MySQL

mysql - mysql 两个表中两列的总和

sql - 如何在 SQL 中连接浮点列?

r - 如何在 R 中绘制探索性决策树

r - x86_64-conda_cos6-linux-gnu-ld : cannot find -lc

mysql - 如何在mysql中编写更新查询?