SQL Server - оператор SELECT с переменной и методом SUM () - PullRequest
0 голосов
/ 17 января 2019

EDIT:

Постараюсь объяснить это более подробно как можно лучше. Я попытался сделать запрос немного проще, подумав, что его будет легче понять, но, возможно, это был плохой ход.

Я пытаюсь получить PK_Queue и FK_Queue_Milestone из 1-го ряда моей таблицы Queue , упорядоченной по PriorityScore DESC и Время добавлено ASC

Я хочу получить только первую строку, но мне посоветовали не использовать 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, но не работает должным образом

1 Ответ

0 голосов
/ 17 января 2019

Ну, вы бы написали это как:

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;
...