[英]SQL Server - SELECT statement with Variable and SUM() method
编辑:
这次将尽我所能尽可能详细地解释。 我试图使查询更简单些,以为它将使查询更容易理解,但这可能是一个不好的举动。
我试图让从PriorityScore DESC和ASC TimeAdded命令我的队列表的第一行的PK_Queue和FK_Queue_Milestone
我只想获得第一行,但建议我不要使用TOP(1),因为这将导致对原始选择进行另一个SELECT。
这是我的查询:
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
当我尝试运行查询时,它似乎无法正确排序,因为它总是获取表的最后一行 。
因此做了一些研究,在这里偶然发现了这个问题 。
似乎是我遇到的相同问题,但使用MySQL而不是SQL Server。
TLDR:想要按优先级排序DESC和TimeAdded,但不能正常工作
好吧,你可以这样写:
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;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.