我想编写一个SQL查询,调用几个有条件的列。桌子看起来像这样。
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。因此,只有第二行,即上面原始表的第四行,才符合条件。
所以我想得到的结果应该是:
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查询?这是我的尝试,但不起作用。
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,所以请看一看。谢谢你的帮助!
发布于 2018-06-26 10:18:19
四栏(A、B、C、D)最早的日期是2018-05-01和2018-05-31。
大多数数据库都支持least()函数,因此您似乎希望:
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的第二个参数应该是一个字符串。BETWEEN。如果日期包含时间组件,那么它将不能像预期的那样工作。发布于 2018-06-26 09:47:02
我不太确定是否正确,但我认为日期列之间的操作符必须是,而不是OR。此外,您还可以使用“间隔”操作符来检查时间跨度中是否包括日期:
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条件分组为
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"
)发布于 2018-06-26 09:50:37
通过使用Mysql查询,如下所示
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')https://stackoverflow.com/questions/51039663
复制相似问题