如何从结果集中选择最大四分之一?

时间:2019-05-29 05:42:16

标签: sql sql-server tsql

我有很多年的每个季度的周期列表,我需要从结果中选择最大周期。

例如,实际数据将是这样;

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

在这里,我只需要获取给定数据中的最新季度。我们需要得到2018年第四季度。

我尝试过:

select substring  (perioddescription, 1, 4)

但是我之间有一些联系,因此我们将不胜感激。感谢advacne

3 个答案:

答案 0 :(得分:1)

您可以在下面尝试-

select top 1 * from tablename
order by cast(left(perioddescription,4) as int) desc,cast(right(perioddescription,1) as int) desc

答案 1 :(得分:1)

使用自定义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

答案 2 :(得分:0)

简单的MAX函数可以为您提供所需的输出-

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