下面是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比较TestingTable1onBUYER_ID和USER_ID。我需要TestingTable2在比较 from 之后找到所有(基本上是计数)丢失和不匹配的条目TestingTable1。我为此创建了 SQL 小提琴 -
http://sqlfiddle.com/#!3/d87b2/1
如果你在 SQL Fiddle 中运行我的查询,你会得到输出——
BUYER_ID ERROR
1345653 5
这是正确的,因为从on和比较后的最后three一行TestingTable1缺失TestingTable2,其余行two不匹配。TestingTable1BUYER_IDUSER_ID
现在复杂的事情开始了。
问题陈述-
在我当前的输出中,我得到 ERROR count as 5。因此,如果您在两个表中看到第一行ITEM_ID并且PRODUCT_ID相同但不相同,CREATED_TIME并且LAST_TIME这两次之间的差异仅为1 minute. 所以目前我将其报告为不匹配,但我需要的是,如果它们之间的差异在 范围内15 minutes range,那么我不想报告为错误。因此,在我当前的查询中实现此功能后,我将获得错误计数,4因为差异在15 minutes range第一行之内。
因此,在从 Stack Overflow 获得帮助后,我找到了解决方案,下面是在 SQL Server 中运行良好的 sql 查询(错误计数为 4),但在 Hive 中却不行,Hive supports only equality JOINS我无法在 Hive 中运行以下查询. 所以我需要一些其他的方法来解决这个问题。是否可以在 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 小提琴中添加的最后一行之后,它不起作用,我得到零错误,这不是是的,因为时差已经有一个错误。