我目前正在尝试从具有特定范围的数据库中获取条目。表中的字符串是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数据库来执行查询。
非常感谢任何帮助!如果我应该添加更多可能的输入/输出,请告诉我,我可以这样做。
答案 0 :(得分:2)
您的逻辑似乎是您希望保留最短日期(c1
,c2
和c3
)在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
。