Hive SQL - 检索日期范围中存在的列的不同值

Posted

技术标签:

【中文标题】Hive SQL - 检索日期范围中存在的列的不同值【英文标题】:Hive SQL - Retrieve distinct values for a column existing in a date range 【发布时间】:2017-10-22 17:22:37 【问题描述】:

我在 Hive 中有一张表如下:

|attribute | start_date | end_date   | 
|----------+------------+------------+ 
| x        | 10-01-2014 | 03-31-2015 | 
| x        | 04-01-2015 | 09-30-2015 | 
| x        | 10-01-2015 | 03-31-2016 |
| x        | 04-01-2016 | 09-30-2016 |
| y        | 10-01-2015 | 03-31-2016 | 
| y        | 04-01-2016 | 09-30-2015 |

我想获得一个仅包含在 10-01-2014 和 09-30-2016 之间发生的所有属性的不同列表,但它们必须在 (10-01-2014, 04-01- 2015 年、2015 年 10 月 1 日、2016 年 4 月 1 日)。

我试过了:

select distinct(attribute),min(start_date) ,max(end_date) 
from table 
where 
    max(end_date) >='03-31-2016' 
    and min(effective_start_date) <='2015-01-01'

但这并不能阻止任何差距。任何帮助将不胜感激。

【问题讨论】:

请发布具有预期输出的表格。为什么您的查询中有min()max() 函数? “每个人都必须有一个开始日期”是什么意思?您是指一系列重叠的(start_date, end_date) 行吗?请澄清您的问题。 【参考方案1】:

这样的?

select attribute
from t
where startdate in ('10-01-2014', '04-01-2015', '10-01-2015', '04-01-2016')
having count(distinct date) = 4;

我建议您使用 ISO 标准格式(“2014-10-01”)存储和引用您的日期,但我已将日期保留为您的格式。

【讨论】:

以上是关于Hive SQL - 检索日期范围中存在的列的不同值的主要内容,如果未能解决你的问题,请参考以下文章

SQL:我如何找到存在于 30 分钟日期时间范围内的“Created_at”列的数据集记录?

SQL 插入到存在列的位置

SQL中项目收入的日期范围计算?

SQL 检索具有不同序列号的所有记录,在日期范围和计数之间,拒绝代码 = "Low Current"

需要根据日期范围参数包含不同列的报告

SQL - 按日期范围查询