sql - 嵌套的Select语句-使用两个字符串值之间的字符串获取数据集

标签 sql select sqlite nested

我目前正在尝试从具有一定范围的数据库中获取条目。表中找到的字符串是日期,其格式为yyyyMMdd。编辑:存储为字符串;不是日期!

该表如下所示(无ID):

+----------+----------+----------+
|    c1    |    c2    |    c3    |
+----------+----------+----------+
| 20161101 | 20161102 | 20161027 |
| 20131212 | 20161102 | 20161028 |
+----------+----------+----------+


使用以下代码,我可以在每一行的三列中获得最小的“值”:

SELECT MIN(c1, c2, c3) FROM my_table WHERE c1 IS NOT NULL AND c2 IS NOT NULL AND c3 IS NOT NULL;

+-----------------+
| MIN(c1, c2, c3) |
+-----------------+
|        20161027 |
|        20131212 |
+-----------------+


但是,当我尝试将其用作嵌套SQL查询的一部分时,仅获取例如在2015年至2017年之间(不包括第二行)使用此查询进行的:

SELECT * FROM my_table WHERE MIN(c1, c2, c3) IN (SELECT MIN(c1, c2, c3) FROM my_table WHERE c1 IS NOT NULL AND c2 IS NOT NULL AND c3 IS NOT NULL) BETWEEN '2015' AND '2017';


我什么都没有得到。我还测试了其他内容,例如... LIKE '2016%'(不产生任何结果)和... LIKE '%'给出表中上面显示的所有结果。

我想出去的是

+----------+----------+----------+
|    c1    |    c2    |    c3    |
+----------+----------+----------+
| 20161101 | 20161102 | 20161027 |
+----------+----------+----------+


我假设我在嵌套的SELECT语句上使用不正确,但是经过2个小时的搜索和测试,我无法弄清楚出了什么问题。

我正在使用SQLite Studio 3.1.0测试查询,并使用本地sqlite 3数据库对其执行查询。

任何帮助深表感谢!如果我应该添加更多可能的输入/输出,请告诉我,以便我可以这样做。

最佳答案

您的逻辑似乎是要保留(c1c2c3)的最小日期在2015年至2017年之间的记录。如果是这样,则应使用以下记录:

SELECT *
FROM my_table
WHERE STRFTIME('%Y-%m-%d', MIN(c1, c2, c3)) BETWEEN DATE('2015-01-01') AND DATE('2017-12-31')


此外,您应该将格式更改为YYYY-mm-dd

关于sql - 嵌套的Select语句-使用两个字符串值之间的字符串获取数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40398301/

相关文章:

sql - 查找包含多个长格式条件的 ID

生产环境中的 python 和 SQLite

sql - JPA entitymanager 运行 native sql 查询以从表中获取所有内容

mysql - 如何根据mysql中的另一个表更新表?

mysql - 如何在 mysql 中使用 alter 添加列?

java - Spring MVC 中的选择框看起来是空的

android - 尝试重新查询已经关闭的游标

c - 生成函数和全局变量

sql - 检索紧挨着最后一个日期的 SQL Server

c# - sql中如何获取 "TryCast"数据