Как выбрать максимальный квартал из набора результатов? - PullRequest
1 голос
/ 29 мая 2019

У меня есть список периодов для каждого квартала в течение многих лет, мне нужно выбрать максимальный период из результата.

Скажем, например, фактические данные будут такими:

**period description**
2014 Q2
2014 Q1
2018 Q3
2016 Q1
2017 Q4
2018 Q4

Здесь мне нужно выбрать только последний квартал в данных данных ... то есть нам нужно получить QP 2018 года.

Я пытался:

select substring  (perioddescription, 1, 4)

, но у меня естьСтрока между ними, так что любая помощь будет высоко ценится. Спасибо в Advacne

Ответы [ 3 ]

1 голос
/ 29 мая 2019

Другой возможный подход с использованием пользовательского предложения ORDER BY:

Ввод:

CREATE TABLE #Data (
   [Period] varchar(7)
)
INSERT INTO #Data 
   ([Period])
VALUES   
   ('2014 Q2'),
   ('2014 Q1'),
   ('2018 Q3'),
   ('2016 Q1'),
   ('2017 Q4'),
   ('2018 Q4')

T-SQL:

SELECT TOP(1) [Period]   
FROM #Data
ORDER BY 
   CONVERT(int, SUBSTRING([Period], 1, 4)) * 10 + 
   CONVERT(int, SUBSTRING([Period], 7, 1)) DESC

Выход:

-------
Period
-------
2018 Q4

Примечания. Если вы не уверены, что все ваши данные имеют формат yyyy Qq, используйте TRY_CONVERT():

SELECT TOP(1) [Period]   
FROM #Data
ORDER BY 
   COALESCE(TRY_CONVERT(int, SUBSTRING([Period], 1, 4)), 0) * 10 + 
   COALESCE(TRY_CONVERT(int, SUBSTRING([Period], 7, 1)), 0) DESC
1 голос
/ 29 мая 2019

Вы можете попробовать ниже -

select top 1 * from tablename
order by cast(left(perioddescription,4) as int) desc,cast(right(perioddescription,1) as int) desc
0 голосов
/ 29 мая 2019

Простая функция МАКС может дать вам желаемый результат-

SELECT MAX(period_description) 
FROM 
(
    SELECT '2014 Q2' period_description UNION ALL
    SELECT '2014 Q1' UNION ALL
    SELECT '2018 Q3' UNION ALL
    SELECT '2016 Q1' UNION ALL
    SELECT '2017 Q4' UNION ALL
    SELECT '2018 Q4'
)A

Выход -

2018 Q4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...