T-SQL 两个具有不同排序依据的查询之间的 UNION,所有排序依据
T-SQL UNION between two queries with different order by, all orded by
如标题我有这个问题:
我有这两个问题
SELECT state, TIMESTAMP
FROM myTable
WHERE state != 9
ORDER BY TIMESTAMP ASC
SELECT TOP (3) state, TIMESTAMP
FROM myTable
WHERE state = 9
ORDER BY TIMESTAMP DESC
是否可以再次 ORDER BY
(ORDER BY TIMESTAMP ASC
) 这些查询的 UNION
?
谢谢
编辑:更具体
我有一个带有 [state]
和 [timestamp]
字段的 table。 [State]
值可以是 3、8 或 9。
我需要的是 select:
[state] = 9
最后 3 条记录
[state] != 9
全部
全部ORDER BY [timestamp] ASC
你可以这样做:
SELECT [state], [TIMESTAMP]
FROM
(
SELECT [state], [TIMESTAMP]
FROM myTable
WHERE [state] != 9
UNION
SELECT TOP(3) [state], [TIMESTAMP]
FROM myTable
WHERE [state] = 9
ORDER BY [TIMESTAMP] DESC
) u
ORDER BY [TIMESTAMP] ASC
第一个查询的 order by 在联合中是多余的,但第二个查询需要它用于 top(3)
,否则你会得到 3 个任意行。
请这样尝试
SELECT *
FROM (
SELECT state, TIMESTAMP
FROM myTable
WHERE state != 9
UNION
SELECT TOP (3) state, TIMESTAMP
FROM myTable
WHERE state = 9
ORDER BY (CASE WHEN state = 9 THEN TIMESTAMP END ) DESC
,(CASE WHEN state != 9 THEN TIMESTAMP END ) ASC
) D
如标题我有这个问题:
我有这两个问题
SELECT state, TIMESTAMP
FROM myTable
WHERE state != 9
ORDER BY TIMESTAMP ASC
SELECT TOP (3) state, TIMESTAMP
FROM myTable
WHERE state = 9
ORDER BY TIMESTAMP DESC
是否可以再次 ORDER BY
(ORDER BY TIMESTAMP ASC
) 这些查询的 UNION
?
谢谢
编辑:更具体
我有一个带有 [state]
和 [timestamp]
字段的 table。 [State]
值可以是 3、8 或 9。
我需要的是 select:
[state] = 9
最后 3 条记录
[state] != 9
全部
全部ORDER BY [timestamp] ASC
你可以这样做:
SELECT [state], [TIMESTAMP]
FROM
(
SELECT [state], [TIMESTAMP]
FROM myTable
WHERE [state] != 9
UNION
SELECT TOP(3) [state], [TIMESTAMP]
FROM myTable
WHERE [state] = 9
ORDER BY [TIMESTAMP] DESC
) u
ORDER BY [TIMESTAMP] ASC
第一个查询的 order by 在联合中是多余的,但第二个查询需要它用于 top(3)
,否则你会得到 3 个任意行。
请这样尝试
SELECT *
FROM (
SELECT state, TIMESTAMP
FROM myTable
WHERE state != 9
UNION
SELECT TOP (3) state, TIMESTAMP
FROM myTable
WHERE state = 9
ORDER BY (CASE WHEN state = 9 THEN TIMESTAMP END ) DESC
,(CASE WHEN state != 9 THEN TIMESTAMP END ) ASC
) D