mysql - 使用条件调用多列的 SQL 查询(带 NA)
问题描述
这是我上一个问题的一个连续问题。我想编写一个 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'
感谢您的任何帮助!
解决方案
您可以尝试使用IFNULL()
这些值并使用getdate()
,因此如果它为 null,它将仅在今天使用,然后不会被认为是最少的,这基本上会忽略它们。
喜欢:LEAST(IFNULL(A,getdate()), IFNULL(B,getdate()), IFNULL(C,getdate()), IFNULL(D,getdate()))
希望这可能会将您推向正确的方向
除非NA
那里有一个字符串,您可以使用类似的 case 语句case when A = 'NA' THEN getdate() end
最终可能看起来像
SELECT * FROM myTable
WHERE organisation LIKE Ikea
LEAST(IFNULL(A,getdate()), IFNULL(B,getdate()), IFNULL(C,getdate()), IFNULL(D,getdate())) >= '2018-05-01' AND
LEAST(IFNULL(A,getdate()), IFNULL(B,getdate()), IFNULL(C,getdate()), IFNULL(D,getdate())) < '2018-06-01'
或者
SELECT * FROM myTable
WHERE organisation LIKE Ikea
LEAST(case when A = 'NA' THEN getdate() else A end, case when B = 'NA' THEN getdate() else B end, case when C = 'NA' THEN getdate() else C end, case when D = 'NA' THEN getdate() else D end) >= '2018-05-01' AND
LEAST(case when A = 'NA' THEN getdate() else A end, case when B = 'NA' THEN getdate() else B end, case when C = 'NA' THEN getdate() else C end, case when D = 'NA' THEN getdate() else D end) < '2018-06-01'
推荐阅读
- harp.gl - 将 harp.gl geojson 点渲染为相对于陆地区域而不是屏幕区域的大小
- javascript - 这个 useState 函数是做什么的以及如何做的?
- quanteda - 关于 textstat_simil 和 textstat_dist 的问题(Lit Review 相关)
- jsf - 为什么使用延迟加载对任何字段 Prime Faces 数据表进行排序后过滤器变为空?
- php - 安装 xampp 后 PHP 不显示
- dart - Dart 中的 Object、Dynamic 和 Var 之间的区别?
- pytorch - 批处理中每个单个数据点的操作损失
- arrays - 使用 XSLT 将 XML 元素移动到不同的节点
- tomcat - 在 64 位 Windows 环境中安装 32 位 Tomcat
- python - 有没有办法在 Python 中进行矩阵乘法,但矩阵中的项目是 str 而不是 int