Hive查询:如何匹配trip_3g表oil_chng_date落在同VIN的mma表起止时间范围的记录
调整方案
你只需要在关联条件中补充时间范围的匹配规则即可,推荐将时间判断放在JOIN的ON子句中,减少无效关联提升查询效率。
调整后的查询语句如下:
SELECT trip_3g.vin, trip_3g.start AS trip_start, trip_3g.oil_flag, trip_3g.oil_chng_date, mma.vin AS mma_vin, mma.start AS mma_start, mma.end AS mma_stop, -- 若mma表实际结束时间字段名为stop,替换为mma.stop即可 mma.lifecycle_mode, mma.auth_mode FROM trip_3g INNER JOIN mma ON trip_3g.vin = mma.vin AND trip_3g.oil_chng_date BETWEEN mma.start AND mma.end -- 核心新增的时间匹配条件 WHERE trip_3g.region = 'NA' AND trip_3g.oil_flag = 1 LIMIT 100;
注意事项
- 请确保
trip_3g.oil_chng_date、mma.start、mma.end三个字段的数据类型一致,若存在格式差异需先做类型转换,比如字符串格式时间转时间戳可以用unix_timestamp()函数处理后再比较 BETWEEN为闭区间规则,会同时包含起始和结束时间点,如果你需要排除两端的任意一端,可改为区间判断写法:AND trip_3g.oil_chng_date > mma.start AND trip_3g.oil_chng_date < mma.end
内容的提问来源于stack exchange,提问作者Abhijit
相关产品推荐
相关产品推荐

