最多带子串/拆分

时间:2019-07-30 14:36:02

标签: sql

无法获取列子字符串的最大值。

列的版本值如下:Sep-2018 | V.2 在所有这样的值中,我要提取“ |”之前最大值的所有行在“ |”之后存在。在数据集中,版本列(以及其他列)中的所需输出是2018年10月| V.6

需要找到日期部分(即2018年10月)和V.6等不同版本的最大值

数据集:

  partner | region | affiliate | country | Revenue |    version     
 ---------|--------|-----------|---------|---------|---------------- 
  Alpha   | US     | USA       | USA     |     100 | Sep-2018 | V.1 
  Alpha   | US     | USA       | USA     |     568 | Sep-2018 | V.2 
  Alpha   | US     | USA       | USA     |     674 | Sep-2018 | V.6 
  Alpha   | US     | USA       | USA     |     314 | Oct-2018 | V.4 
  Alpha   | US     | USA       | USA     |     510 | Oct-2018 | V.5 
  Alpha   | US     | USA       | USA     |     309 | Oct-2018 | V.6 

所需结果:

Alpha   US  USA USA 309 Oct-2018 | V.6

4 个答案:

答案 0 :(得分:0)

将日期转换为CYMD进行排序 然后添加用于处理领带的第二个值

答案 1 :(得分:0)

在MS SQL中,以下脚本应该有效;第一个ORDER BY获取最新日期,第二个ORDER BY获取最大版本值。

select top 1 * 
from [tablename]
order by 
    convert(date, '01-'+SUBSTRING([version], 1, charindex('|', [version]) - 2)) DESC,
    SUBSTRING([version], charindex('|', [version]) + 3, LEN([version])) DESC

答案 2 :(得分:0)

我正在使用Redshift,并且尝试使用下面提到的查询从V.1,V.2,V.3。等中提取最大值: * select * from example where cast(substring(version,regexp_instr (version,'。')+ 1)为十进制) =(从示例中选择max(cast(substring(version,regexp_instr(version,'。')+ 1)作为十进制)))*
                                                                                                                                                                                                                                                 但是出现了这个错误:无法完成操作 [Amazon] [Amazon Redshift](30)尝试执行查询时发生错误:[SQLState XX000]错误:无效数字,值'e',位置0,类型:整数 详情:


错误:无效数字,值'e',位置0,类型:整数  编码:1207  内容:ep-2018 | V.3  查询:18804464  位置:: 0  流程:query1_593_18804464 [pid = 0]


答案 3 :(得分:0)

也许可以这样尝试:

SELECT * FROM YourTableName
WHERE Version in (SELECT distinct MAX(Version) FROM YourTableName GROUP BY partner);