【发布时间】:2020-06-02 21:50:36
【问题描述】:
正如标题所说,我有一个带有日期列的表格。我正在尝试检索 2 个日期之间的所有行以及按日期排序的开始日期之前的 X 行。
按日期 DSC 从表中选择 *
20200201
20200101
20191201
20191101
20191001
20190901
20190801
20190701
我想要介于 20200201 和 20191201 之间以及前 3 行(不知道日期)
result
20200201
20200101
20191201
20191101
20191001
20190901
我当前的查询由于某种原因返回了一组随机的联合之间的高日期:
(SELECT * FROM Table WHERE Date BETWEEN 20200201 AND 20191201 ORDER BY Date ASC)
UNION
(SELECT * FROM Table WHERE Date < 20191201 ORDER BY Date DESC LIMIT 3)
知道我哪里出错了吗?
【问题讨论】:
-
你得到了多少行结果?您的 'Date BETWEEN'-coditions 对我来说似乎是倒退的,这应该会给您 0 个结果,从连接的底部只留下 3 行结果。请注意,不过我从未使用过 Postgres SQL。
-
对不起,是Mysql。我切换了日期,它确实使查询变得更糟。它给了我一些第一个选择和第二个选择的 1 个
-
在末尾添加 ORDER BY,对 UNION 的结果进行排序。 (子查询的结果集顺序不会保留在子查询之外。)也许切换到 UNION ALL。
-
抱歉这么久才回来。问题正如 jarlh 指出的那样,没有保留子查询的顺序(这就是事情混乱的原因),整个 UNION 的简单 ORDER BY 解决了这个问题。我没有尝试 Gordon 的回复,因为这解决了我的问题