У меня есть таблица с именем ExcludedPositions
следующим образом:
HoldingID [int] NOT NULL
CloseOfBusinessDate [date] NOT NULL
ReasonCode [tinyint] NOT NULL
Я хочу найти, какая уникальная комбинация HoldingID/CloseOfBusinessDate
имеет наибольшее количество ReasonCode
значений 6. Я предпринимал различные попытки для этого, но ни одна из них не была даже близка к решению. Пожалуйста, порекомендуйте.
Я бы взял верхнюю запись, упорядоченную по убыванию количества групп с кодом причины 6.
SELECT TOP(1) -- WITH TIES <- Will return multiple records when more than one group matches the criteria.
HoldingID,
CloseOfBusinessDate
FROM
YourTable
WHERE
ResonCode=6
GROUP BY
HoldingID,
CloseOfBusinessDate
ORDER BY
COUNT(*) DESC
TOP 1 WITH TIES может решить эту проблему
Но затем я прокручиваю результаты и подсчитываю их. Я хочу, чтобы счетчик отображался как часть результатов запроса.
@Scott - вы можете добавить COUNT (*) As RecordCount в качестве поля в предложении SELECT.
@Scott - не стесняйтесь отмечать ответ на вопрос, если он сработал.
Да, конечно Росс. Сделанный.
Вы можете использовать оконную функцию (max, Row_number) и CTE для решения проблемы.
Я использовал оконную функцию, потому что хочу поддерживать «если у вас есть два набора данных с одинаковым количеством строк, он вернет их все»
select
HoldingID
,CloseOfBusinessDate
from (
select * ,row_number() over(order by c desc) rw
from ( select * ,count(*) over( partition by HoldingID,CloseOfBusinessDate) as c
from td
where ReasonCode=6
)a )a
where a.rw=1
Это отличный ответ. Единственным предостережением будет то, что если у вас есть два набора данных с одинаковым количеством строк, он вернет только 1 из них.