对于我的应用程序的特定需求,我需要检索某个日期范围内的所有记录,并且我还需要之前的记录。
为此,我在第二个 SELECT 中使用了 UNION 和 TOP 1 指令,但不幸的是,第二个 SELECT 返回了满足条件的所有记录,而没有考虑 TOP 1。
SELECT
T1.Date,
T1.Order_Number
FROM Table1 T1
WHERE T1.idCustomer = 12345
AND T1.Date BETWEEN '20231101' AND '20231130'
UNION
SELECT TOP 1
T2.Date,
T2.Order_Number
FROM Table1 T2
WHERE T2.idCustomer = 12345
AND T2.Date < '20231101'
ORDER BY Date DESC, Order_Number DESC
您可以对 UNION 的 第二部分使用 子查询,以确保正确应用
TOP 1
,然后将 ORDER BY
应用于组合结果。
SELECT
T1.Date,
T1.Order_Number
FROM Table1 T1
WHERE T1.idCustomer = 12345
AND T1.Date BETWEEN '2023-11-01' AND '2023-11-30'
UNION ALL
SELECT * FROM (
SELECT TOP 1
T2.Date,
T2.Order_Number
FROM Table1 T2
WHERE T2.idCustomer = 12345
AND T2.Date < '2023-11-01'
ORDER BY T2.Date DESC, T2.Order_Number DESC
) AS PreviousRecord
ORDER BY Date, Order_Number;
UNION适用于两个查询的组合结果,语句末尾的ORDER BY子句影响整个结果集,而不仅仅是第二个查询。