SQL,有没有办法在UNION之后只返回1行

问题描述 投票:0回答:1

对于我的应用程序的特定需求,我需要检索某个日期范围内的所有记录,并且我还需要之前的记录

为此,我在第二个 SELECT 中使用了 UNIONTOP 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
sql sql-server union
1个回答
0
投票

您可以对 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子句影响整个结果集,而不仅仅是第二个查询。

© www.soinside.com 2019 - 2024. All rights reserved.