编辑:
这次将尽我所能尽可能详细地解释。我试图使查询更简单些,以为它可以使理解更容易,但这可能是一个不好的举动。
我试图从 PriorityScore DESC排序的 Queue 表的第一行中获取 PK_Queue 和 FK_Queue_Milestone / strong>和 TimeAdded ASC
我只想获得第一行,但是建议我不要使用 TOP(1),因为这将导致对我的原始选择进行另一个选择。
这是我所拥有的查询:
SELECT
@Local_PK_Queue = Q.PK_Queue,
@Local_PK_Milestone_Validate = Q.FK_Queue_Milestone
FROM dbo.Queue AS Q
INNER JOIN @Local_PKHolderTable AS P
ON Q.FK_Queue_Process = P.PK_Process
AND Q.FK_Queue_Milestone = P.PK_Milestone
AND Q.FK_Queue_QueueType = P.PK_QueueType
WHERE Q.FK_Queue_Milestone = P.PK_Milestone
AND Q.FK_Queue_Process = P.PK_Process
AND Q.Tags LIKE '%' + @Input_Tags + '%'
AND ((FK_Queue_State = 5 AND TimeDeferred < GETUTCDATE()) OR (FK_Queue_State = 1))
AND Q.FK_Queue_Robot IS NULL
AND Q.FK_Queue_QueueType = P.PK_QueueType
ORDER BY
Q.PriorityScore DESC,
Q.TimeAdded
当我尝试运行查询时,它似乎没有正确地排序,因为它总是获取表的最后一行。
也做了一些研究,在这里偶然发现了这个question。
似乎遇到了相同的问题,但是使用MySQL而不是SQL Server。
TLDR:想按优先级排序DESC和TimeAdded,但不能正常工作
答案 0 :(得分:0)
好吧,你可以这样写:
SELECT @var = PK_Test, @var2 = SUM(PriorityScore)
FROM Queue
GROUP BY PK_Test
ORDER BY SUM(PriorityScore);
但是,这非常奇怪,因为GROUP BY
可能返回多个行,而您大概只需要一行。我可能会怀疑您是否真的想将变量分配给最高优先级分数:
SELECT TOP (1) @var = PK_Test, @var2 = SUM(PriorityScore)
FROM Queue
GROUP BY PK_Test
ORDER BY SUM(PriorityScore) DESC;