Как использовать статистическую функцию (MAX) в столбце varchar, который представляет сезон - PullRequest
0 голосов
/ 26 июня 2019

Я создаю отчет, который должен получить данные, относящиеся к сезону MAX конкретной статьи.Для этого мне нужно использовать функцию MAX в SSMS.Проблема в том, что данные представляют собой смесь букв и цифр, и они не распознают, например, что префикс FW на самом деле идет после SS.Ниже приведены примеры данных.

Я пытался использовать переменные пока безрезультатно

select 
    season, article
from 
    vw_onerange_nam 
where
    article = '656927'
group by 
    season, article 
having 
    season = max(season)

Результаты:

season article
------ ------------------
SS2020 656927
SS2019 656927
FW2019 656927 

Я надеюсь получить одну строкуданных только для SS2020, так как я знаю, что это MAX сезон в этих данных, вместо этого я получаю все три

1 Ответ

2 голосов
/ 26 июня 2019

Вы можете использовать TOP 1 с ORDER BY для двух выражений (вместо использования MAX для одного выражения), например:

SELECT TOP 1 season, article
FROM vw_onerange_nam
WHERE article = '656927'
ORDER BY RIGHT(season,4) DESC, 
         CASE LEFT(season,2) WHEN 'SS' THEN 1 WHEN 'FW' THEN 2 END DESC

Я не преобразовал часть года в числовую, потому что я предполагаю, что она всегда будет состоять из 4 цифр и строка будет сортироваться одинаково.

Если у вас есть другие сезоны, кроме весны / лета и осени / зимы, вы можете добавить их в выражение CASE с соответствующими значениями в предложении THEN.

Позднее редактировать:

Если вам нужны строки для нескольких статей, с последним сезоном для каждой статьи, вы можете использовать ROW_NUMBER следующим образом:

SELECT season, article
FROM (
    SELECT season, article,
        ROW_NUMBER() OVER (PARTITION BY article ORDER BY RIGHT(season,4) DESC, 
             CASE LEFT(season,2) WHEN 'SS' THEN 1 WHEN 'FW' THEN 2 END DESC) AS RowNum
    FROM vw_onerange_nam
) x
WHERE x.RowNum=1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...