PhpMyAdmin SQL查询表,其中同名行的日期在某个日期之前和之后

pgccezyw  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(119)

我刚刚安装了WAMP服务器在我的Windows 10电脑和我玩它学习如何查询SQL表。所以我做了一个我不知道如何查询它的情况下。我已经搜索了如果我的问题是一个重复的问题在这个网站上,但由于我有限的英语-我不能在这个网站上找到问题一样我。
我的表名是test。在PhpMyAdmin中它看起来像这样:

用普通语言表达的查询如下:

  • 显示名称在2020/01/01之前具有TGL且在2022/02/01之后具有TGL的行 *

所以预期的结果就是我用红色标记的那个:

从这个网站的问题,这是类似于我的问题是查询表使用NOT BETWEEN和使用< or >.所以我尝试这个问题的答案,像这样在PhpMyAdmin:

SELECT * FROM `test` WHERE TGL < "2020/01/01" OR TGL > "2022/02/01"

另一次尝试使用NOT BETWEEN

SELECT * FROM `test` WHERE TGL NOT BETWEEN "2020/01/01" AND "2022/02/01"

但查询结果(逻辑上)包含另一行(CCC),该行的TGL在2020/01/01之前,或TGL在2022/02/01(BBB)之后。如下图所示:

打得不合逻辑,所以我也试着作这样的查询:

SELECT * FROM `test` WHERE TGL < "2020/01/01" AND TGL > "2022/02/01"

并且查询结果显示一个空行。
按照我的问题的答案,所以我试着:

SELECT * FROM `test` WHERE TGL NOT BETWEEN "2020/01/01" AND "2022/02/01" GROUP BY NAMA

但查询结果是这样的:

由于我仍然不能找到这个问题在这个网站上像我的,我会很高兴,如果有人可以给我一个重复的问题链接-所以我可以删除这个问题。
但如果没有像我这样的重复问题,我如何查询日期才能得到预期的结果呢?
任何形式的回应都将不胜感激。
先谢谢你了。
修改
目前我用一种愚蠢的方式来解决问题,我认为在Maven看来这是一种不好的方式(在我这样的情况下这样做并不好,因为还有另一种更好的方式)。我在网上找到了一种方法,叫做嵌套查询,一种使用另一个查询结果的查询。所以我使用了这种方法。

select * from test WHERE NAMA IN
(SELECT distinct NAMA FROM test WHERE NAMA IN
(SELECT DISTINCT NAMA from test where TGL < "2020/01/01")
and (TGL > "2022/02/01"))
AND (TGL < "2020/01/01" or TGL > "2022/02/01")

虽然上面的查询给了我预期的结果,我仍然想知道是否有另一种方法是正确的方式。

  • 谢谢-谢谢
8hhllhi2

8hhllhi21#

您的问题令人困惑。您正确地使用了此查询并返回了所需的结果:

SELECT * FROM `test` WHERE TGL < "2020/01/01" OR TGL > "2022/02/01"

为什么不需要行'B004'和'C001',因为它们都满足要求?
'B004' has TGL after 2022/02/01
'C001' has TGL before 2020/01/01

相关问题