我有一个多年来每个季度的周期列表,我需要从结果中选择最长周期。
例如,实际数据是这样的;
**period description**
2014 Q2
2014 Q1
2018 Q3
2016 Q1
2017 Q4
2018 Q4
在这里,我只需要获取给定数据中的最新季度。也就是说,我们需要获得2018年第四季度。
我试过了:
select substring (perioddescription, 1, 4)
但我在它们之间有一个字符串,所以任何帮助将不胜感激。
您可以在下面尝试 -
select top 1 * from tablename
order by cast(left(perioddescription,4) as int) desc,cast(right(perioddescription,1) as int) desc
使用自定义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
一个简单的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