在每个查询中使用 UNION 的 ORDER BY

ORDER BY with UNION in each query

我有一个关于 UNION ALL

的查询
SELECT TOP 1 * FROM Test WHERE Username LIKE '%me%'
AND DateTime > '2015-12-03' AND DateTime < '2015-12-04' ORDER BY DateTime ACS
UNION ALL
SELECT TOP 1 * FROM Test WHERE Username LIKE '%me%' 
AND DateTime > '2015-12-03' AND DateTime < '2015-12-04' ORDER BY DateTime DESC

但是这个查询在 UNION 中给我错误。

我该如何解决?

编辑 抱歉,忘了说我想 SELECT 一天的第一个和最后一个数据

您只能在最后一个查询的 UNION 上使用 ORDER BY。要实现您想要的输出:

SELECT the First and the Last data from one day

您可以使用 ROW_NUMBER:

;WITH Cte AS(
    SELECT *,
        rn1 = ROW_NUMBER() OVER(ORDER BY DateTime ASC),
        rn2 = ROW_NUMBER() OVER(ORDER BY DateTime DESC)
    FROM Test 
    WHERE
        Username LIKE '%me%' 
        AND DateTime > '2015-12-03' 
        AND DateTime < '2015-12-04'
)
SELECT * FROM Cte WHERE rn1 = 1 UNION ALL
SELECT * FROM Cte WHERE rn2 = 1

您还可以使用 OR 代替 UNION ALL 来简化此操作:

;WITH Cte AS(
    SELECT *,
        rn1 = ROW_NUMBER() OVER(ORDER BY DateTime ASC),
        rn2 = ROW_NUMBER() OVER(ORDER BY DateTime DESC)
    FROM Test 
    WHERE
        Username LIKE '%me%' 
        AND DateTime > '2015-12-03' 
        AND DateTime < '2015-12-04'
)
SELECT * FROM Cte WHERE rn1 = 1 OR rn2 = 1

但是如果首尾数据相同,结果会不同。第一个查询将 return 2 个相同的行,而第二个查询将只 return 1 行。