首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用条件调用多列的SQL查询

使用条件调用多列的SQL查询
EN

Stack Overflow用户
提问于 2018-06-26 09:40:21
回答 3查看 115关注 0票数 0

我想编写一个SQL查询,调用几个有条件的列。桌子看起来像这样。

代码语言:javascript
复制
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  2018-07-01   
Orange       2018-04-02  2018-05-01  2018-07-08  2018-05-26 
Ikea         2018-06-02  2018-05-01  2018-07-08  2018-05-26
Nestle       2018-06-02  2018-05-01  2018-07-08  2018-05-26
Ikea         2018-05-04  2018-05-05  2018-04-02  2018-06-01

我想找一排,这个组织是宜家,四栏(A,B,C,D)最早的日期是2018-05-01和2018-05-31。因此,只有第二行,即上面原始表的第四行,才符合条件。

所以我想得到的结果应该是:

代码语言:javascript
复制
organisation          A           B          C           D
Ikea         2018-06-01  2018-05-03  2018-05-29  2018-07-01    
Ikea         2018-06-02  2018-05-01  2018-07-08  2018-05-26

如何编写SQL查询?这是我的尝试,但不起作用。

代码语言:javascript
复制
SELECT * FROM myTable 
WHERE organisation LIKE Ikea 
AND (A >= "2018-05-01" AND A <= "2018-05-31") 
OR (B >= "2018-05-01" AND B <= "2018-05-31") 
OR (C >= "2018-05-01" AND C <= "2018-05-31") 
OR (D >= "2018-05-01" AND D <= "2018-05-31")

编辑::现在我意识到我需要处理NA值,如果一行包含NAs,我想忽略NAs,查看其他值中最早的日期。我为此创建了another question,所以请看一看。谢谢你的帮助!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-26 10:18:19

四栏(A、B、C、D)最早的日期是2018-05-01和2018-05-31。

大多数数据库都支持least()函数,因此您似乎希望:

代码语言:javascript
复制
SELECT t.*
FROM myTable t
WHERE t.organisation LIKE 'Ikea' AND
      LEAST(a, b, c, d) >= '2018-05-01' AND
      LEAST(a, b, c, d) < '2018-06-01';

您可以在不支持LEAST()的数据库中构造类似的逻辑,但这会给出ides。

备注:

  • LIKE的第二个参数应该是一个字符串。
  • SQL中用于字符串和日期常量的标准分隔符是单引号,而不是双引号。
  • 我不建议在日期/时间列上使用BETWEEN。如果日期包含时间组件,那么它将不能像预期的那样工作。
票数 0
EN

Stack Overflow用户

发布于 2018-06-26 09:47:02

我不太确定是否正确,但我认为日期列之间的操作符必须是,而不是OR。此外,您还可以使用“间隔”操作符来检查时间跨度中是否包括日期:

代码语言:javascript
复制
SELECT * FROM myTable 
WHERE organisation LIKE Ikea 
AND A BETWEEN "2018-05-01" AND "2018-05-31" 
AND B BETWEEN "2018-05-01" AND "2018-05-31" 
AND C BETWEEN "2018-05-01" AND "2018-05-31" 
AND D BETWEEN "2018-05-01" AND "2018-05-31"

或者正如@Roman在注释中所建议的那样,您应该将or条件分组为

代码语言:javascript
复制
SELECT * FROM myTable 
WHERE organisation LIKE Ikea 
AND (
    A BETWEEN "2018-05-01" AND "2018-05-31" 
 OR B BETWEEN "2018-05-01" AND "2018-05-31" 
 OR C BETWEEN "2018-05-01" AND "2018-05-31" 
 OR D BETWEEN "2018-05-01" AND "2018-05-31"
)
票数 0
EN

Stack Overflow用户

发布于 2018-06-26 09:50:37

通过使用Mysql查询,如下所示

代码语言:javascript
复制
 select * from myTable
    where organisation='Ikea'
and LEAST(A,B,C,D)>= date('2018-05-01') 
and LEAST(A,B,C,D) < date('2018-06-01')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51039663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档