下面是TestingTable1数据
BUYER_ID | ITEM_ID | CREATED_TIME
-----------+-------------------+------------------------
1345653 110909316904 2012-07-09 21:29:06
1345653 151851771618 2012-07-09 19:57:33
1345653 221065796761 2012-07-09 19:31:48
1345653 400307563710 2012-07-09 18:57:33
1345653 310411560125 2012-07-09 16:09:49
1345653 120945302103 2012-07-09 13:40:23
1345653 261060982989 2012-07-09 09:02:21
下面是TestingTable2数据
USER_ID | PRODUCT_ID | LAST_TIME
-----------+-------------------+-------------------
1345653 110909316904 2012-07-09 21:30:06
1345653 152851771618 2012-07-09 19:57:33
1345653 221065796761 2012-07-09 19:31:48
1345653 400307563710 2012-07-09 18:57:33
我需要比较TestingTable2
与TestingTable1
上BUYER_ID
和USER_ID
。 我需要找到所有(基本计数)的缺失和不匹配项TestingTable2
从比较后TestingTable1
。 我创建SQL小提琴公司招聘
http://sqlfiddle.com/#!3/d87b2/1
如果你运行我在SQL查询拨弄,你会得到输出原样
BUYER_ID ERROR
1345653 5
这是对去年three
从行TestingTable1
在缺少TestingTable2
和休息two
是从比较后不匹配TestingTable1
上BUYER_ID
和USER_ID
。
现在,复杂的事情开始。
问题陈述-
在我的电流输出,我得到错误计数为5
。 所以,如果你看到第一排的两个表ITEM_ID
和PRODUCT_ID
是相同的,但CREATED_TIME
和LAST_TIME
不一样的,这两个时间之间的区别仅仅是1 minute
。 所以,目前我正在报告为不匹配,但我需要的是,如果它们之间的区别在于内15 minutes range
,那么我不希望报告为错误。 所以在我当前的查询执行此功能后,我会得到错误计数为4
,因为不同的是内15 minutes range
的第一行。
所以从堆栈溢出采取的帮助后,我发现这种情况的解决方案,并在下面的SQL查询的SQL服务器工作正常(这将给错误计数为4),但不是在蜂巢的Hive supports only equality JOINS
,我不能运行下面的查询在蜂巢。 所以,我需要做这个问题的一些其他方式。 是否有可能做莫名其妙where子句中的时间差的条件? Basically how I can rewrite the below SQL query
在一些其他的方式,例如,它会满足我的所有要求。
SELECT TT.BUYER_ID,
COUNT(*)
FROM (
SELECT testingtable1.buyer_id,
testingtable1.item_id,
testingtable1.created_time
FROM testingtable2
RIGHT JOIN testingtable1
ON (
testingtable1.item_id = testingtable2.product_id
AND testingtable1.BUYER_ID = testingtable2.USER_ID
AND ABS(DATEDIFF(mi, testingtable1.created_time, testingtable2.last_time)) <= 15
)
WHERE testingtable2.product_id IS NULL
) TT
GROUP BY TT.BUYER_ID;
预计输出,我实现上述特征 - 后需要
BUYER_ID ERROR
1345653 4
更新: -
按下面WEST评论,输出只显示错误计数为1,但应显示为4和删除他在SQL小提琴添加的最后一行之后也,其没有工作,我得到零误差,这是不权已经存在的时间差一个错误。