这是我 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/