按创建时间ASC排序的SQL

时间:2020-06-06 09:30:50

标签: sql sql-server tsql sql-order-by

我有这个查询:

SELECT 
    p.[TerminalId],
    Keys = JSON_QUERY('[' + string_agg(json_query('{"Point":"' + p.Location.STAsText() + '","CreatedDateTime":"' + cast(p.CreatedDateTime as nvarchar(20)) + '"}'),',') + ']')
FROM
    (SELECT
         geography::STGeomFromText(Location.STAsText(), 4326) as Location,
         [CreatedDateTime],
         [TerminalId],
         ROW_NUMBER() OVER (ORDER BY [CreatedDateTime] ASC) AS RowNum
     FROM 
         [Magicar_Route].[dbo].[PacketLocations]) AS p
GROUP BY 
    p.[TerminalId]

我希望p.LocationCreatedDateTime asc JSON列中按Keys进行排序,但是在查询Location之后没有对ASC进行排序?

如何根据 CreatedDateTime ASC 对位置进行排序?

我将查询更改为此:

WITH NewScores AS 
(
    SELECT
        geography::STGeomFromText(Location.STAsText(), 4326) AS Location,
        [CreatedDateTime],
        [TerminalId]
    FROM
        [Magicar_Route].[dbo].[PacketLocations]
    ORDER BY 
        [CreatedDateTime] ASC
)
SELECT 
    [TerminalId],
    Keys = JSON_QUERY('['+ string_agg(json_query('{"Point":"' + Location.STAsText() + '","CreatedDateTime":"' + cast(CreatedDateTime as nvarchar(20)) + '"}'),',') + ']')
FROM
    NewScores

但是不幸的是我遇到了这个错误:

Msg 1033,第15级,状态1,第100行
除非还指定了TOP,OFFSET或FOR XML,否则ORDER BY子句在视图,内联函数,派生表,子查询和公用表表达式中无效。

1 个答案:

答案 0 :(得分:0)

与其在CTE内进行排序,不如在下面的查询中放置

WITH NewScores AS 
(
    SELECT
        geography::STGeomFromText(Location.STAsText(), 4326) AS Location,
        [CreatedDateTime],
        [TerminalId]
    FROM
        [Magicar_Route].[dbo].[PacketLocations]
)
SELECT 
    [TerminalId],
    Keys = JSON_QUERY('['+ string_agg(json_query('{"Point":"' + Location.STAsText() + '","CreatedDateTime":"' + cast(CreatedDateTime as nvarchar(20)) + '"}'),',') + ']')
FROM
    NewScores
ORDER BY 
    [CreatedDateTime] ASC
相关问题