SQL Server-具有Variable和SUM()方法的SELECT语句

时间:2019-01-17 11:29:07

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

编辑:

这次将尽我所能尽可能详细地解释。我试图使查询更简单些,以为它可以使理解更容易,但这可能是一个不好的举动。

我试图从 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,但不能正常工作

1 个答案:

答案 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;