以下是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 Fiddle中运行我的查询,您将获得输出 -
BUYER_ID ERROR
1345653 5
three
中TestingTable1
的{{1}}行中的TestingTable2
行正确,而two
上TestingTable1
的{{1}}与BUYER_ID
的{{1}}之间的USER_ID
不匹配}和5
。
现在复杂的事情正在开始。
问题陈述 -
在我当前的输出中,我的ERROR计数为ITEM_ID
。因此,如果您看到表PRODUCT_ID
和CREATED_TIME
中的第一行相同,但LAST_TIME
和1 minute
不相同,则这两次之间的差异仅为{{ 1}}。所以目前我报告的是不匹配,但我需要的是,如果它们之间的差异在15 minutes range
之内,那么我不想报告为错误。因此,在我当前的查询中实现此功能后,我将错误计数为4,因为第一行的差异在15分钟范围内。
那么如何在当前查询中实现此功能呢?那是我的问题。
P.S-我正在使用Hive和Hive支持类似sql的语法。所以我认为任何修改都可以在我当前的查询中使用。
答案 0 :(得分:1)
您的SQL Server SQL Fiddle查询可以修改如下,并使其工作。但是,我不确定Hive是否支持datediff
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;