HIVE SQL - 根据查询中的日期提取最大或最后一条记录

问题描述 投票:0回答:1

enter image description here我有一个应用程序表,我可以查询一些结果。在该表中,根据开始和结束日期,每个应用程序都有多个记录。

我需要改进一个查询,该查询只会根据 appl_support_end_date 字段提取最后一位可靠性工程师,如果结束年份为 9999。如果没有活动的应用程序,它将有一个真正的结束日期。

我有一段适用于 9999 的代码,但我在弄清楚如何提取 HIVE 中的最后或最大日期时遇到问题

`SELECT appl_name, prod_problem_reliability_engineer, appl_support_start_date,
appl_support_end_date  from datamart_core.dm_appmaintenance_mapping
where (appl_name = 'GALAXY-WEBMETHODS-PROD' 
or appl_name = 'MD ENTERPRISE LIMS NA-PROD' 
or appl_name = 'JJCC CCV2 NA - PROD' 
or appl_name = 'MENTOR - MENTORDIRECT.COM PROD' 
or appl_name = 'CONSUMER LATIN AMERICA-ECC-PROD-PLA')
and year(appl_support_end_date) = 9999
--order by appl_name, appl_support_end_date`
--returns 4 results **consumer does not have a 9999 date

任何想法或指导表示赞赏。谢谢。

尝试多种想法。我已经看到了 Windows 函数可以在哪里工作,但这对我来说是一个新概念。

hive
1个回答
0
投票

您可以使用行号功能,例如

SELECT appl_name, prod_problem_reliability_engineer, appl_support_start_date, appl_support_end_date
FROM (
  SELECT appl_name, prod_problem_reliability_engineer, appl_support_start_date, appl_support_end_date,
         ROW_NUMBER() OVER (PARTITION BY appl_name ORDER BY appl_support_end_date DESC) AS row_num
  FROM datamart_core.dm_appmaintenance_mapping
  WHERE appl_name IN ('GALAXY-WEBMETHODS-PROD', 'MD ENTERPRISE LIMS NA-PROD', 'JJCC CCV2 NA - PROD', 'MENTOR - MENTORDIRECT.COM PROD', 'CONSUMER LATIN AMERICA-ECC-PROD-PLA')
    AND (YEAR(appl_support_end_date) = 9999 OR appl_support_end_date IS NULL)
) ranked
WHERE row_num = 1;
© www.soinside.com 2019 - 2024. All rights reserved.