mysql - 查询另一个表中列出的日期

标签 mysql sql hive query-optimization hiveql

我想选择两个日期之间的表格中的某些行(在单独的表格中找到)。我的表和查询的详细信息可以在上一个问题中找到 here (我现在对如何在 HIVE/hiveQL 中执行此操作很感兴趣)。正如我当前的查询所代表的那样,它运行了很长时间然后似乎无限期地挂起,而当我在日期中进行硬编码时它运行速度相当快。供引用的表格和查询:

VISIT_INFO,包含这些列:

pers_key - unique identifyer for each person
pers_name - name of person
visit_date - date at which they visited a business

VALID_DATES,具有这些列:

condition - string
start_date - date
end_date - date 

查询本身:

select pers_key, pers_name from VISIT_INFO a
CROSS JOIN
(select start_date, end_date from VALID_DATES where condition = 'condition1') b
WHERE (a.visit_date >= b.start_date and a.visit_date <= b.end_date)
GROUP BY a.pers_key

值得注意的是,我使用的是 HIVE 0.12,因此摆脱连接并将 select 语句放在 WHERE 子句中是不可能的。我想知道这个查询究竟有什么问题,或者是什么导致它失败。任何关于如何改进这一点的建议将不胜感激。

最佳答案

尝试:

select pers_key, pers_name 
from VISIT_INFO a 
join 
valid_dates b
WHERE a.visit_date BETWEEN b.start_date AND b.end_date
GROUP BY pers_key, pers_name;

从 Hive 0.13 开始:

select pers_key, pers_name 
from VISIT_INFO a , valid_dates b
WHERE a.visit_date BETWEEN b.start_date AND b.end_date
GROUP BY pers_key, pers_name;

关于mysql - 查询另一个表中列出的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31570510/

相关文章:

php - 没有从 MySQL 检索到 Android ListView 的数据

mysql 排名变量

mysql - Sequelize - 自定义运算符

hadoop - 在 hive/hbase 中更新查询

hadoop - Windows 'File Not Found'上的hiveserver2并挂起

php - 在 MySQL 端或 PHP 端对 SQL 数据进行分组?

php - 无法连接到数据库服务器

MySQL Replication : SQL Thread, 有哪些权限?

mysql - 如何将具有相似列的两个表合并为一个表

hadoop - Hive 0.12 和 Hadoop 2.2.0-cdh5.0.0-beta2 的 SerDe 问题