这是我上一个问题的连续问题。我想编写一个sql查询,调用几个带条件的列。我正在使用rmysql包开发r studio。我的服务器是mysql。
这张table看起来像这样。
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值的行中,我想忽略nas,看看其余值中最早的日期是什么。例如,对于第二行,最早的日期是“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查询?这是我在得到上一个问题的答案后的尝试,但对于使用nas的行来说效果不好。
SELECT * FROM myTable
WHERE organisation LIKE Ikea
LEAST(A, B, C, D) >= '2018-05-01' AND
LEAST(A, B, C, D) < '2018-06-01'
谢谢你的帮助!
3条答案
按热度按时间xlpyo6sf1#
考虑在使用
UNION ALL
:rextester演示(注:日期为dd-mm-yyyy格式)
5lhxktic2#
你可以试着用
IFNULL()
价值和用途getdate()
所以如果它是空的,它只会在今天使用,然后就不会被认为是最基本的忽略它们。比如:
LEAST(IFNULL(A,getdate()), IFNULL(B,getdate()), IFNULL(C,getdate()), IFNULL(D,getdate()))
希望这能把你推向正确的方向除非
NA
其中有一个字符串,可以使用case语句case when A = 'NA' THEN getdate() end
可能最后看起来像或
wfypjpf43#
只是使用
coalesce()
: